Initial commit
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
class DashboardsController{
|
||||
private $model;
|
||||
|
||||
function __construct(){
|
||||
$this->model = new DashboardsModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* get all user dashborads ( public dashboards are also taken)
|
||||
* @return json list of dashboards
|
||||
*/
|
||||
public function getUserDashboards(){
|
||||
echo json_encode($this->model->getUserDashboards());
|
||||
}
|
||||
|
||||
/**
|
||||
* get selected dashbord info
|
||||
* @return json info and gadgets for selected dashboards
|
||||
*/
|
||||
public function getMyDashboard(){
|
||||
$idDashboard = isset($_REQUEST['myDashboard']) ? $_REQUEST['myDashboard'] : 0;
|
||||
echo json_encode($this->model->getMyDashboard($idDashboard));
|
||||
}
|
||||
|
||||
/**
|
||||
* get data required for order central gadget
|
||||
* @return json orders info
|
||||
*/
|
||||
public function getOrderCentralInfo(){
|
||||
$filters = isset($_REQUEST['filters']) ? $_REQUEST['filters'] : '';
|
||||
$sortBy = isset($_REQUEST['sortBy']) ? $_REQUEST['sortBy'] : '';
|
||||
echo json_encode($this->model->getOrderCentralInfo($filters, $sortBy));
|
||||
}
|
||||
|
||||
/**
|
||||
* get data required for assigned orders
|
||||
* @return json assigned orders info
|
||||
*/
|
||||
public function getAssignedOrdersInfo(){
|
||||
$filters = isset($_REQUEST['filters']) ? $_REQUEST['filters'] : '';
|
||||
$sortBy = isset($_REQUEST['sortBy']) ? $_REQUEST['sortBy'] : '';
|
||||
echo json_encode($this->model->getAssignedOrdersInfo($filters, $sortBy));
|
||||
}
|
||||
|
||||
/**
|
||||
* get data required for the enxt action gadget
|
||||
* @return json next actions info
|
||||
*/
|
||||
public function getNextActionsInfo(){
|
||||
$filters = isset($_REQUEST['filters']) ? $_REQUEST['filters'] : '';
|
||||
$sortBy = isset($_REQUEST['sortBy']) ? $_REQUEST['sortBy'] : '';
|
||||
echo json_encode($this->model->getNextActionsInfo($filters, $sortBy));
|
||||
}
|
||||
|
||||
/**
|
||||
* get gadgets for creating new dashboards
|
||||
* @return json list of gadgets
|
||||
*/
|
||||
public function getAllGadgets(){
|
||||
$idDashboard = isset($_REQUEST['idDashboard']) ? $_REQUEST['idDashboard'] : 0;
|
||||
$selectedUserType = isset($_REQUEST['selectedUserType']) ? $_REQUEST['selectedUserType'] : 0;
|
||||
echo json_encode($this->model->getAllGadgets($idDashboard, $selectedUserType));
|
||||
}
|
||||
|
||||
/**
|
||||
* get information for a selected dashboard on creation
|
||||
* @return json dashborad info
|
||||
*/
|
||||
public function getDashboardInfo(){
|
||||
$idDashboard = isset($_REQUEST['idDashboard']) ? $_REQUEST['idDashboard'] : '';
|
||||
echo json_encode($this->model->getDashboardInfo($idDashboard));
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new adshboard
|
||||
* @return json array containg the success or error messages
|
||||
*/
|
||||
public function createDashboard(){
|
||||
$selectedGadgets = isset($_REQUEST['selectedGadgets']) ? $_REQUEST['selectedGadgets'] : '[]';
|
||||
$name = isset($_REQUEST['name']) ? $_REQUEST['name'] : '';
|
||||
$visibility = isset($_REQUEST['visibility']) ? $_REQUEST['visibility'] : '';
|
||||
$idDashboard = isset($_REQUEST['idDashboard']) ? $_REQUEST['idDashboard'] : 0;
|
||||
$selectedUserType = isset($_REQUEST['selectedUserType']) ? $_REQUEST['selectedUserType'] : 0;
|
||||
echo json_encode($this->model->createDashboard($idDashboard, $name, $visibility, $selectedGadgets, $selectedUserType));
|
||||
}
|
||||
|
||||
/**
|
||||
* get user types
|
||||
* @return json user types from the system
|
||||
*/
|
||||
public function getUserTypes(){
|
||||
echo json_encode($this->model->getUserTypes());
|
||||
}
|
||||
|
||||
/**
|
||||
* remove a dashborad
|
||||
* @return json update message
|
||||
*/
|
||||
public function removeDashboard(){
|
||||
$idDashboard = isset($_REQUEST['idDashboard']) ? $_REQUEST['idDashboard'] : 0;
|
||||
echo json_encode($this->model->removeDashboard($idDashboard));
|
||||
}
|
||||
|
||||
/**
|
||||
* get template for view dashboard
|
||||
*/
|
||||
public function createDashboardTemplate(){
|
||||
global $user;
|
||||
require_once('templates/CreateDashboardTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* get template for view dashboard
|
||||
*/
|
||||
public function dashboardsViewTemplate(){
|
||||
require_once('templates/DashboardsViewTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* get template for orders central gadget
|
||||
*/
|
||||
public function orderCentralTemplate(){
|
||||
require_once('templates/gadgets/orderCentralTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* get template for assigned orders gadget
|
||||
*/
|
||||
public function assignedOrdersTemplate(){
|
||||
require_once('templates/gadgets/assignedOrdersTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* get template for orders central gadget
|
||||
*/
|
||||
public function nextActionsTemplate(){
|
||||
require_once('templates/gadgets/nextActionsTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* get template for gadgets fiter
|
||||
*/
|
||||
public function dashboardsFiltersTemplate(){
|
||||
require_once('templates/DashboardsFiltersTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* get template for dashboards
|
||||
*/
|
||||
public function dashboardsTemplate(){
|
||||
require_once('templates/DashboardsTemplate.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* show page for dashboards
|
||||
*/
|
||||
public function showPage(){
|
||||
require_once('DashboardsPage.php');
|
||||
}
|
||||
}
|
||||
?>
|
||||
663
api-wiaas/server/components/v1/dashboards/DashboardsModel.php
Normal file
663
api-wiaas/server/components/v1/dashboards/DashboardsModel.php
Normal file
@@ -0,0 +1,663 @@
|
||||
<?php
|
||||
class DashboardsModel{
|
||||
|
||||
/**
|
||||
* get all gadgets by user type (used for creating new dashboards)
|
||||
* @param INT $idDashboard id of the dashborad
|
||||
* @param INT $selectedUserType id of the user type that was selected
|
||||
* @return array gadgets array
|
||||
*/
|
||||
public function getAllGadgets($idDashboard, $selectedUserType){
|
||||
global $database, $user;
|
||||
|
||||
$idDashboard = $database->escapeValue($idDashboard);
|
||||
$idUserType = ($user->getUserType() === USER_TYPES['BROKER'] && intval($selectedUserType) !== 0)
|
||||
? $selectedUserType
|
||||
: $user->getIdUserType();
|
||||
|
||||
$sql = "SELECT g.id AS idGadget,
|
||||
g.name,
|
||||
g.module,
|
||||
CASE WHEN rdg.idGadget IS NULL THEN 0 ELSE 1 END AS isSelected
|
||||
FROM ".TABLES['gadgets']." g
|
||||
INNER JOIN ".TABLES['rel_user_types_gadgets']." rutg
|
||||
ON rutg.idGadget=g.id
|
||||
LEFT OUTER JOIN ".TABLES['rel_dashboard_gadgets']." rdg
|
||||
ON rdg.idGadget=g.id AND rdg.idDashboard=$idDashboard
|
||||
WHERE rutg.idUserType=".$idUserType."
|
||||
ORDER BY g.name";
|
||||
|
||||
return $database->fetchResultArray($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* get info for a dashbord on edit
|
||||
* @param INT $idDashboard id of the dashborad
|
||||
* @return HASHARRAY dashborad info
|
||||
*/
|
||||
public function getDashboardInfo($idDashboard){
|
||||
global $database, $user;
|
||||
$data = [];
|
||||
$whereSql = $user->getUserType() === USER_TYPES['BROKER']
|
||||
? "AND (d.idUser=".$user->getUserId()." OR d.visibility='public')"
|
||||
: "AND (d.idUser=".$user->getUserId().")";
|
||||
|
||||
$idDashboard = intval($database->escapeValue($idDashboard));
|
||||
$sql = "SELECT
|
||||
d.id AS idDashboard,
|
||||
d.name,
|
||||
d.visibility,
|
||||
d.idUserType
|
||||
FROM ".TABLES['dashboards']." d
|
||||
WHERE d.id=$idDashboard $whereSql";
|
||||
$info = $database->fetchResultArray($sql);
|
||||
if(empty($info)){
|
||||
return [
|
||||
'messages' => [
|
||||
'code' => 'error',
|
||||
'message' => 'NOT_OWNER_OF_DASHBAORD'
|
||||
]];
|
||||
}
|
||||
$data['dashboardInfo'] = $info[0];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* get all gadgets in a dashborad
|
||||
* @param INT $idDashboard id of the dashborad
|
||||
* @return Array array of gadgets
|
||||
*/
|
||||
private function getGadgets($idDashboard){
|
||||
global $database;
|
||||
|
||||
$sql = "SELECT
|
||||
g.id AS idGadget,
|
||||
g.name,
|
||||
g.module,
|
||||
rdg.position
|
||||
FROM ".TABLES['gadgets']." g
|
||||
INNER JOIN ".TABLES['rel_dashboard_gadgets']." rdg
|
||||
ON rdg.idGadget=g.id
|
||||
WHERE rdg.idDashboard=$idDashboard
|
||||
ORDER by rdg.position";
|
||||
|
||||
return $database->fetchResultArray($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* get all dashborads for a user (including public ones)
|
||||
* @return ARRAY array with all dashborads
|
||||
*/
|
||||
public function getUserDashboards(){
|
||||
global $database, $user;
|
||||
$data = [];
|
||||
$extraFields = '';
|
||||
$whereSql = $user->getUserType() === USER_TYPES['BROKER']
|
||||
? ""
|
||||
: "AND d.idUserType=".$user->getIdUserType();
|
||||
|
||||
$sql = "SELECT d.id AS idDashboard,
|
||||
d.name,
|
||||
d.visibility,
|
||||
ut.type
|
||||
FROM ".TABLES['dashboards']." d
|
||||
INNER JOIN ".TABLES['user_types']." ut
|
||||
ON ut.id=d.idUserType
|
||||
WHERE d.idUser=".$user->getUserId()." OR (d.visibility='public' $whereSql)
|
||||
ORDER BY d.idUserType, d.lastUpdated DESC";
|
||||
$query = $database->query($sql);
|
||||
while($row = $database->fetchArray($query)){
|
||||
$data[$row['type']][] = $row;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* get information to show for dashborad view
|
||||
* @param INT $idDashboard id of the dashborad
|
||||
* @return HASHARRAY dahsborad info
|
||||
*/
|
||||
public function getMyDashboard($idDashboard){
|
||||
global $database, $user;
|
||||
$data = [];
|
||||
$whereSql = $user->getUserType() === USER_TYPES['BROKER']
|
||||
? "(d.idUser=".$user->getUserId()." OR d.visibility='public')"
|
||||
: "(d.idUser=".$user->getUserId()." OR (d.visibility='public' AND d.idUserType=".$user->getIdUserType()."))";
|
||||
$isOwner = $user->getUserType() === USER_TYPES['BROKER']
|
||||
? "1 AS isOwner"
|
||||
: "CASE WHEN d.idUser=".$user->getUserId()." THEN 1 ELSE 0 END AS isOwner";
|
||||
$idDashboard = intval($database->escapeValue($idDashboard));
|
||||
if($idDashboard !== 0){
|
||||
$whereSql .= "AND d.id=$idDashboard";
|
||||
}
|
||||
|
||||
$sql = "SELECT d.id AS idDashboard,
|
||||
d.name,
|
||||
$isOwner
|
||||
FROM ".TABLES['dashboards']." d
|
||||
WHERE $whereSql
|
||||
ORDER BY d.lastUpdated DESC
|
||||
LIMIT 1";
|
||||
$data['info'] = $database->fetchResultArray($sql);
|
||||
$data['info'] = isset($data['info'][0]) ? $data['info'][0] : [];
|
||||
if(!empty($data['info'])){
|
||||
$data['gadgets'] = $this->getGadgets($data['info']['idDashboard']);
|
||||
}else{
|
||||
return $this->getMyDashboard(0);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* generate a filter condition on gadget filter
|
||||
* @param Array $filters array of filters
|
||||
* @return string sql filter condtion
|
||||
*/
|
||||
private function setFilterSql($filters){
|
||||
$whereSql = "1=1";
|
||||
|
||||
if(!empty($filters)){
|
||||
foreach ($filters as $key => $filterValue) {
|
||||
$whereSql .= " AND $key like '%$filterValue%'";
|
||||
}
|
||||
}
|
||||
|
||||
return $whereSql;
|
||||
}
|
||||
|
||||
private function setOrderBySql($sortBy){
|
||||
$orderBySql = "";
|
||||
if( isset($sortBy->key) && isset($sortBy->direction) ){
|
||||
$orderBySql .= $sortBy->key." ".$sortBy->direction;
|
||||
}
|
||||
|
||||
return $orderBySql;
|
||||
}
|
||||
|
||||
/**
|
||||
* get information for the order central gadget
|
||||
* @param Array $filters array of filters to be applied
|
||||
* @return Array array with orders info
|
||||
*/
|
||||
public function getOrderCentralInfo($filters, $sortBy){
|
||||
global $database, $user;
|
||||
|
||||
$filters = json_decode($filters);
|
||||
$sortBy = json_decode($sortBy);
|
||||
$whereSql = $this->setFilterSql($filters);
|
||||
$orderBySql = $this->setOrderBySql($sortBy);
|
||||
$extraJoin = '';
|
||||
$extraWhere = '';
|
||||
if(!$orderBySql){
|
||||
$orderBySql = "orderDate DESC";
|
||||
}
|
||||
|
||||
if($user->getUserType() === USER_TYPES['BROKER']) {
|
||||
$extraWhere = "AND (
|
||||
b.idUser = ".$user->getUserId()."
|
||||
OR o.assignedTo IS NULL
|
||||
)";
|
||||
}
|
||||
|
||||
if($user->getUserType() === USER_TYPES['CUSTOMER']) {
|
||||
$extraJoin = "INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
|
||||
ON rclc.id = o.idCustomerInstance
|
||||
INNER JOIN ".TABLES['customers']." c
|
||||
ON rclc.idCustomer = c.id
|
||||
AND c.idUser = ".$user->getUserId();
|
||||
}
|
||||
|
||||
if($user->getUserType() === USER_TYPES['COMMERCIAL_LEAD']) {
|
||||
$extraJoin = "INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
|
||||
ON rclc.id = o.idCustomerInstance
|
||||
INNER JOIN ".TABLES['commercial_leads']." cl
|
||||
ON rclc.idCommercialLead = cl.id
|
||||
AND cl.idUser = ".$user->getUserId();
|
||||
}
|
||||
|
||||
if($user->getUserType() === USER_TYPES['SUPPLIER']) {
|
||||
$extraJoin = "INNER JOIN ".TABLES['rel_package_products']." rpp
|
||||
ON rpp.idPackage=rop.idPackage AND rop.packageInstance=rpp.packageInstance
|
||||
INNER JOIN ".TABLES['suppliers_countries_products']." scp
|
||||
ON scp.idProduct=rpp.idProduct
|
||||
INNER JOIN ".TABLES['suppliers']." s
|
||||
ON s.id=scp.idSupplier
|
||||
AND s.idUser=".$user->getUserId();
|
||||
}
|
||||
|
||||
$sql = "SELECT * FROM(
|
||||
SELECT o.id AS idOrder,
|
||||
o.orderNumber,
|
||||
o.orderDate,
|
||||
IF(b.name IS NULL, 'unassigned', b.name) AS assignedTo,
|
||||
SUM(rop.packageFixedPrice * rop.units) AS fixedPrice,
|
||||
SUM((rop.packageRecuringPrice * rop.units) + (rop.packageServicePrice * rop.units)) AS recurringPrice,
|
||||
o.status
|
||||
FROM ".TABLES['orders']." o
|
||||
INNER JOIN ".TABLES['rel_order_packages']." rop
|
||||
ON rop.idOrder=o.id
|
||||
$extraJoin
|
||||
LEFT JOIN ".TABLES['brokers']." b
|
||||
ON o.assignedTo = b.id
|
||||
WHERE o.status!='production' AND o.status!='canceled' AND o.status!='end-of-life'
|
||||
$extraWhere
|
||||
GROUP BY o.id
|
||||
) orders
|
||||
WHERE $whereSql
|
||||
ORDER BY $orderBySql
|
||||
LIMIT 5";
|
||||
|
||||
return $database->fetchResultArray($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* get information for the assigned orders gadget
|
||||
* @param Array $filters array of filters to be applied
|
||||
* @param Array $sortBy array of element to apply the sorting
|
||||
* @return Array array with orders info
|
||||
*/
|
||||
public function getAssignedOrdersInfo($filters, $sortBy){
|
||||
global $database, $user;
|
||||
|
||||
$filters = json_decode($filters);
|
||||
$sortBy = json_decode($sortBy);
|
||||
$whereSql = $this->setFilterSql($filters);
|
||||
$orderBySql = $this->setOrderBySql($sortBy);
|
||||
if(!$orderBySql){
|
||||
$orderBySql = "orderDate DESC";
|
||||
}
|
||||
|
||||
$sql = "SELECT * FROM(
|
||||
SELECT o.id AS idOrder,
|
||||
o.orderNumber,
|
||||
o.orderDate,
|
||||
b.name AS assignedTo,
|
||||
SUM(rop.packageFixedPrice * rop.units) AS fixedPrice,
|
||||
SUM((rop.packageRecuringPrice * rop.units) + (rop.packageServicePrice * rop.units)) AS recurringPrice,
|
||||
o.status
|
||||
FROM ".TABLES['orders']." o
|
||||
INNER JOIN ".TABLES['rel_order_packages']." rop
|
||||
ON rop.idOrder=o.id
|
||||
LEFT JOIN ".TABLES['brokers']." b
|
||||
ON o.assignedTo = b.id
|
||||
WHERE o.status!='production' AND o.status!='canceled' AND o.status!='end-of-life'
|
||||
AND b.idUser != ".$user->getUserId()."
|
||||
AND o.assignedTo IS NOT NULL
|
||||
GROUP BY o.id
|
||||
) orders
|
||||
WHERE $whereSql
|
||||
ORDER BY $orderBySql
|
||||
LIMIT 5";
|
||||
|
||||
return $database->fetchResultArray($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* get information for next actions gadget
|
||||
* @param Array $filters array of filters to be applied
|
||||
* @return Array array with next actions
|
||||
*/
|
||||
public function getNextActionsInfo($filters, $sortBy){
|
||||
global $database, $user;
|
||||
|
||||
$filters = json_decode($filters);
|
||||
$whereSql = $this->setFilterSql($filters);
|
||||
$orderBySql = $this->setOrderBySql($sortBy);
|
||||
$data = [];
|
||||
if(!$orderBySql){
|
||||
$orderBySql = "idOrder DESC";
|
||||
}
|
||||
if($user->getUserType() === USER_TYPES['BROKER']){
|
||||
$sql = "SELECT * FROM(
|
||||
SELECT
|
||||
DISTINCT o.id as idOrder,
|
||||
o.orderNumber,
|
||||
ps.shortDesc as stepAction,
|
||||
'in-progress' AS status
|
||||
FROM ".TABLES['rel_order_process_step']." rops
|
||||
INNER JOIN ".TABLES['orders']." o
|
||||
ON o.id=rops.idOrder
|
||||
INNER JOIN ".TABLES['rel_process_steps']." rps
|
||||
ON rps.id=rops.idProcessStep
|
||||
INNER JOIN ".TABLES['process_step']." ps
|
||||
ON ps.id=rps.idStep
|
||||
WHERE rops.status='in-progress'
|
||||
) actions
|
||||
WHERE $whereSql
|
||||
ORDER BY $orderBySql
|
||||
LIMIT 7";
|
||||
|
||||
$data = $database->fetchResultArray($sql);
|
||||
}else{
|
||||
$sqlTemp= "CREATE TEMPORARY TABLE temp_next_actions AS (
|
||||
SELECT * FROM(
|
||||
SELECT
|
||||
o.id as idOrder,
|
||||
rops.idPackage,
|
||||
o.orderNumber,
|
||||
ps.shortDesc as stepAction,
|
||||
ps.idActionCode
|
||||
FROM ".TABLES['rel_order_process_step']." rops
|
||||
INNER JOIN ".TABLES['orders']." o
|
||||
ON o.id=rops.idOrder
|
||||
INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
|
||||
ON rclc.id=o.idCustomerInstance
|
||||
INNER JOIN ".TABLES['customers']." c
|
||||
ON c.id=rclc.idCustomer
|
||||
INNER JOIN ".TABLES['rel_process_steps']." rps
|
||||
ON rps.id=rops.idProcessStep
|
||||
INNER JOIN ".TABLES['process_step']." ps
|
||||
ON ps.id=rps.idStep
|
||||
WHERE c.idUser=" .$user->getUserId(). " AND rops.status='in-progress' AND ps.idActionCode IN(4,6,8)
|
||||
) actions
|
||||
WHERE $whereSql
|
||||
ORDER BY $orderBySql
|
||||
LIMIT 7
|
||||
)";
|
||||
$query = $database->query($sqlTemp);
|
||||
|
||||
//questionnaiire validation
|
||||
$sql = "SELECT
|
||||
tna.idOrder,
|
||||
tna.orderNumber,
|
||||
tna.stepAction,
|
||||
rod.validation as status
|
||||
FROM temp_next_actions tna
|
||||
INNER JOIN ".TABLES['rel_order_documents']." rod
|
||||
ON rod.idOrder=tna.idOrder AND rod.idPackage=tna.idPackage
|
||||
WHERE tna.idActionCode=4 AND rod.validation='invalid'";
|
||||
$data = $database->fetchResultArray($sql);
|
||||
|
||||
//customer acceptance
|
||||
$sql = "SELECT
|
||||
tna.idOrder,
|
||||
tna.orderNumber,
|
||||
tna.stepAction,
|
||||
'not-accepted' as status
|
||||
FROM temp_next_actions tna
|
||||
INNER JOIN ".TABLES['rel_order_packages']." rop
|
||||
ON rop.idOrder=tna.idOrder AND rop.idPackage=tna.idPackage
|
||||
WHERE tna.idActionCode=6 AND rop.customerAccepted=0";
|
||||
$data = array_merge($data, $database->fetchResultArray($sql) );
|
||||
|
||||
//schedule meeting
|
||||
$sql = "SELECT
|
||||
DISTINCT tna.idOrder,
|
||||
tna.orderNumber,
|
||||
tna.stepAction,
|
||||
'pending' as status
|
||||
FROM temp_next_actions tna
|
||||
INNER JOIN ".TABLES['rel_order_scheduled_dates']." rosd
|
||||
ON rosd.idOrder=tna.idOrder AND rosd.idPackage=tna.idPackage
|
||||
WHERE tna.idActionCode=8 AND rosd.isDateConfirmed=0";
|
||||
$data = array_merge($data, $database->fetchResultArray($sql) );
|
||||
|
||||
$delSql = "DROP TABLE temp_next_actions";
|
||||
$query = $database->query($delSql);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* validate data for creating / editing a dashborad
|
||||
* @param INT $idDashboard id for the dashborad (used only for edit)
|
||||
* @param String $name name for the deshborad
|
||||
* @param String $visibility visibility of dashboard (can be public or private)
|
||||
* @param Array $gadgets array of gadgets for dashborad
|
||||
* @param INT $selectedUserType id of the user type for witch the gadget is created / edited
|
||||
* @return Array validation error message or null in case of valid data
|
||||
*/
|
||||
private function validateDashboardData($idDashboard, $name, $visibility, $gadgets, $selectedUserType){
|
||||
global $database, $user;
|
||||
$data = [];
|
||||
|
||||
if(empty($gadgets)){
|
||||
$data['messages'][] =[
|
||||
'code' => 'error',
|
||||
'message' => 'NO_GADGETS'
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
$idDashboard = $database->escapeValue($idDashboard);
|
||||
$name = $database->escapeValue($name);
|
||||
$visibility = $database->escapeValue($visibility);
|
||||
$selectedUserType = $database->escapeValue($selectedUserType);
|
||||
|
||||
if($idDashboard === 'null'){
|
||||
$sql = "SELECT d.id
|
||||
FROM ".TABLES['dashboards']." d
|
||||
WHERE name='$name' AND idUser=".$user->getUserId(). "
|
||||
LIMIT 1";
|
||||
$query = $database->query($sql);
|
||||
if($database->numRows($query) > 0){
|
||||
$data['messages'][] =[
|
||||
'code' => 'error',
|
||||
'message' => 'NAME_ALREADY_EXISTS'
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
if($visibility !== 'private' && $visibility !== 'public'){
|
||||
$data['messages'][] =[
|
||||
'code' => 'error',
|
||||
'message' => 'INVALID_VISIBILITY'
|
||||
];
|
||||
}
|
||||
|
||||
$checkMessage = $database->isEmpty('NAME', $name);
|
||||
if($checkMessage){
|
||||
$data['messages'][] = $checkMessage;
|
||||
}
|
||||
|
||||
$checkMessage = $database->invalidLength('NAME', $name, 60);
|
||||
if($checkMessage){
|
||||
$data['messages'][] = $checkMessage;
|
||||
}
|
||||
|
||||
if($visibility === 'public'){
|
||||
$checkMessage = $database->isEmpty('UserType', $selectedUserType);
|
||||
if($checkMessage){
|
||||
$data['messages'][] = $checkMessage;
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* insert or update the gadgets for a dashborad
|
||||
* @param INT $idDashboard id of the dashboard
|
||||
* @param Array $gadgets array of gadgets
|
||||
* @return INT number of affected rows
|
||||
*/
|
||||
private function insertUpdateGadgets($idDashboard, $gadgets){
|
||||
global $database;
|
||||
$newIds = "";
|
||||
|
||||
$sql = "INSERT IGNORE INTO ".TABLES['rel_dashboard_gadgets']."
|
||||
(idDashboard, idGadget, position)
|
||||
VALUES";
|
||||
|
||||
foreach ($gadgets as $gadget) {
|
||||
$gadget->idGadget = $database->escapeValue($gadget->idGadget);
|
||||
$gadget->position = $database->escapeValue($gadget->position);
|
||||
$sql .= "($idDashboard, $gadget->idGadget, $gadget->position),";
|
||||
$newIds .= $gadget->idGadget.",";
|
||||
}
|
||||
$newIds = rtrim($newIds, ',');
|
||||
$sql = rtrim($sql, ',');
|
||||
$query = $database->query($sql);
|
||||
|
||||
$modified = $database->affectedRows();
|
||||
|
||||
$sql = "DELETE FROM ".TABLES['rel_dashboard_gadgets']."
|
||||
WHERE idDashboard=$idDashboard AND idGadget NOT IN($newIds)";
|
||||
$query = $database->query($sql);
|
||||
|
||||
$modified += $database->affectedRows();
|
||||
|
||||
return $modified;
|
||||
}
|
||||
|
||||
/**
|
||||
* create or edit a dashborad
|
||||
* @param INT $idDashboard id of the dashborad(used only for edit)
|
||||
* @param String $name name for the dashbroad
|
||||
* @param String $visibility visibility of dashboard (can be public or private)
|
||||
* @param Array $gadgets array of gadgets for dashborad
|
||||
* @param INT $selectedUserType id of the user type for witch the gadget is created / edited
|
||||
* @return Array update message
|
||||
*/
|
||||
public function createDashboard($idDashboard, $name, $visibility, $gadgets, $selectedUserType){
|
||||
global $database, $user;
|
||||
$data = [];
|
||||
|
||||
$gadgets = json_decode($gadgets);
|
||||
$idUserType = $user->getIdUserType();
|
||||
$idUser = $user->getUserId();
|
||||
if($visibility === 'public'){
|
||||
$selectedUserType = ($user->getUserType() === USER_TYPES['BROKER'] && $selectedUserType !== 0) ? $selectedUserType : $idUserType;
|
||||
$idUser = 'null';
|
||||
}else{
|
||||
$selectedUserType = $idUserType;
|
||||
}
|
||||
|
||||
if(intval($idDashboard) !== 0){
|
||||
$whereSql = $user->getUserType() !== USER_TYPES['BROKER']
|
||||
? " AND d.idUser=".$user->getUserId()
|
||||
: " AND (d.visibility='public' OR d.idUser=".$user->getUserId().")";
|
||||
|
||||
$sql = "SELECT
|
||||
d.id AS idDashboard
|
||||
FROM ".TABLES['dashboards']." d
|
||||
WHERE d.id=$idDashboard $whereSql
|
||||
LIMIT 1";
|
||||
$query = $database->query($sql);
|
||||
$isMyDashboard = $database->numRows($query) > 0 ? true : false;
|
||||
|
||||
if(!$isMyDashboard){
|
||||
$data['messages'][] =[
|
||||
'code' => 'error',
|
||||
'message' => 'NOT_OWNER_OF_DASHBAORD'
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}else{
|
||||
$idDashboard = 'null';
|
||||
}
|
||||
|
||||
$data = $this->validateDashboardData($idDashboard, $name, $visibility, $gadgets, $selectedUserType);
|
||||
|
||||
if(!empty($data)){
|
||||
return $data;
|
||||
}
|
||||
|
||||
$sql = "INSERT INTO ".TABLES['dashboards']."
|
||||
(id, idUser, idUserType, name, visibility)
|
||||
VALUES($idDashboard,".$idUser.",'$selectedUserType','$name', '$visibility')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
name=VALUES(name),
|
||||
idUserType=VALUES(idUserType),
|
||||
visibility=VALUES(visibility)";
|
||||
$query = $database->query($sql);
|
||||
|
||||
$idDashboard = $idDashboard == 'null' ? $database->getInsertId() : $idDashboard;
|
||||
|
||||
$insertGadgetsMessage = $this->insertUpdateGadgets($idDashboard, $gadgets);
|
||||
|
||||
if(intval($idDashboard) !== 0){
|
||||
$data['messages'][] =[
|
||||
'code' => 'success',
|
||||
'message' => 'DASHBORAD_UPDATED'
|
||||
];
|
||||
}else{
|
||||
$data['messages'][] =[
|
||||
'code' => 'success',
|
||||
'message' => 'DASHBORAD_CREATED'
|
||||
];
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* get user types in the system
|
||||
* @return Array array with user types
|
||||
*/
|
||||
public function getUserTypes(){
|
||||
global $database, $user;
|
||||
|
||||
if($user->getUserType() !== USER_TYPES['BROKER']){
|
||||
return [];
|
||||
}
|
||||
|
||||
$sql = "SELECT ut.id,
|
||||
ut.type
|
||||
FROM ".TABLES['user_types']." ut";
|
||||
|
||||
return $database->fetchResultArray($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* remove a dashborad
|
||||
* @param INT $idDashboard id of the dashborad
|
||||
* @return Array update message
|
||||
*/
|
||||
public function removeDashboard($idDashboard){
|
||||
global $database, $user;
|
||||
|
||||
$idDashboard = $database->escapeValue($idDashboard);
|
||||
|
||||
$data = [];
|
||||
|
||||
$whereSql = $user->getUserType() === USER_TYPES['BROKER']
|
||||
? "AND (d.idUser=".$user->getUserId()." OR d.visibility='public')"
|
||||
: "AND (d.idUser=".$user->getUserId().")";
|
||||
|
||||
$idDashboard = intval($database->escapeValue($idDashboard));
|
||||
$sql = "SELECT
|
||||
d.id AS idDashboard
|
||||
FROM ".TABLES['dashboards']." d
|
||||
WHERE d.id=$idDashboard $whereSql";
|
||||
$info = $database->fetchResultArray($sql);
|
||||
if(empty($info)){
|
||||
$data['messages'][] = [
|
||||
'code' => 'error',
|
||||
'message' => 'NOT_OWNER_OF_DASHBAORD'
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
$sql = "DELETE FROM ".TABLES['dashboards']."
|
||||
WHERE id=$idDashboard";
|
||||
|
||||
$query = $database->query($sql);
|
||||
if($database->affectedRows() > 0 ){
|
||||
$data['messages'][] = [
|
||||
'code' => 'success',
|
||||
'message' => 'DASHBORAD_REMOVED'
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
$data['messages'][] =[
|
||||
'code' => 'error',
|
||||
'message' => 'DASHBORAD_REMOVE_ERROR'
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
14
api-wiaas/server/components/v1/dashboards/DashboardsPage.php
Normal file
14
api-wiaas/server/components/v1/dashboards/DashboardsPage.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'dashboards/dashboards.directive.js';?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'dashboards/dashboards-view.directive.js';?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'dashboards/dashboards-filters.service.js';?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'dashboards/dashboards-filters.directive.js';?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'dashboards/create-dashboard.directive.js';?>" type="text/javascript"></script>
|
||||
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'dashboards/gadget-order-central.directive.js';?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'dashboards/gadget-assigned-orders.directive.js';?>" type="text/javascript"></script>
|
||||
<script src="<?php echo PATH_JS_COMPONENTS.'dashboards/gadget-next-actions.directive.js';?>" type="text/javascript"></script>
|
||||
|
||||
<div id="dashboards" class="container-fluid col-md-12">
|
||||
<h1>{{ 'dashboards.TITLE' | translate }}</h1>
|
||||
<dashboards ng-controller="dashboardsCtrl"></dashboards>
|
||||
</div>
|
||||
@@ -0,0 +1,77 @@
|
||||
<div id="create-dashboard-container" class="row">
|
||||
<div class="create-box col-md-12">
|
||||
<input type="text" placeholder="{{ 'dashboards.headers.DASHBOARD_NAME' | translate }}" ng-model="dashboardName" class="dashborad-input col-md-2" />
|
||||
<?php
|
||||
if($user->getUserType() === USER_TYPES['BROKER']){
|
||||
require_once('PublicPrivateDashboard.php');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div ng-if="!viewGadgets" class="dashborad-gadgets">
|
||||
<div class="gadget-layer col-md-6" ng-repeat="gadget in selectedGadgets">
|
||||
<div class="gadget">
|
||||
<h3 class="col-md-12">{{gadget.name}}</h3>
|
||||
<div class="drop-zone"
|
||||
data-drop="true"
|
||||
jqyoui-droppable="{onDrop:'gadgetDropped(gadget)'}">
|
||||
{{ 'dashboards.buttons.DROP' | translate }}
|
||||
</div>
|
||||
<div id="selected-gadget-{{gadget.idGadget}}"
|
||||
class="drag-gadget"
|
||||
idGadget="{{gadget.idGadget}}"
|
||||
data-drag="true"
|
||||
jqyoui-draggable="{animate:true, onStart:'gadgetDragStart()', onStop:'gadgetDragStop()', scroll: false}"
|
||||
data-jqyoui-options="{revert: true}">
|
||||
<span class="glyphicon glyphicon-move"></span>
|
||||
{{ 'dashboards.buttons.DRAG' | translate }}
|
||||
</div>
|
||||
<div class="remove-gadget btn btn-danger" ng-click="removeGadget(gadget)">
|
||||
<span class="remove-gadget-icon glyphicon glyphicon-minus"></span>
|
||||
{{ 'dashboards.buttons.REMOVE_GADGET' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="gadget-layer col-md-6">
|
||||
<div class="gadget">
|
||||
<div class="add-gadget" ng-click="showHideGadgets()">
|
||||
<span class="add-gadget-icon glyphicon glyphicon-plus"></span>
|
||||
{{ 'dashboards.buttons.ADD_GADGET' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="viewGadgets" class="slect-gadgets">
|
||||
<div class="col-md-4" ng-repeat="gadget in gadgets">
|
||||
<div class="gadget">
|
||||
<h3 class="col-md-12">{{gadget.name}}</h3>
|
||||
<div class="gadget-description col-md-8">
|
||||
{{ 'dashboards.gadgets.' + gadget.module + '.DESCRIPTION' | translate }}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div ng-if="!gadget.isSelected" class="btn btn-primary" ng-click="addGadget(gadget)">
|
||||
<span class="glyphicon glyphicon-plus"></span>
|
||||
{{ 'dashboards.buttons.ADD_TO_DASHBOARD' | translate }}
|
||||
</div>
|
||||
<div ng-if="gadget.isSelected" class="alert alert-success">
|
||||
{{ 'dashboards.messages.GADGET_ALREADY_IN_DASHBOARD' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="create-box col-md-12">
|
||||
<div ng-if="!viewGadgets" class="btn btn-primary" ng-click="createDashboard()">
|
||||
<span class="glyphicon glyphicon-plus"></span>
|
||||
{{ 'dashboards.buttons.' + getButtonTranslationKey() | translate }}
|
||||
</div>
|
||||
|
||||
<div ng-if="viewGadgets" class="btn btn-danger" ng-click="showHideGadgets()">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span>
|
||||
{{ 'dashboards.buttons.BACK' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,22 @@
|
||||
<div class="fitler-layer">
|
||||
<div class="filter-title">
|
||||
{{ 'dashboards.headers.FILTER_COLUMN' | translate }}<br/>
|
||||
</div>
|
||||
<div ng-if="isFilterSet()" class="filter-message alert alert-success">
|
||||
<span class="glyphicon glyphicon-info-sign"></span>
|
||||
<span class="filter-title">{{ 'dashboards.headers.APPLIERD_FILTER' | translate }}</span> {{getFilterText(gadget.module)}}
|
||||
</div>
|
||||
<div class="filter-logic">
|
||||
{{filterKey()}}:
|
||||
<input type="text"
|
||||
filterType="textValue"
|
||||
class="filter-input"
|
||||
ng-model="filters[filterKey()]"/>
|
||||
</div>
|
||||
<div ng-click="applyFilter(gadget.module)" class="filter-apply btn btn-primary">
|
||||
<span class="glyphicon glyphicon-search"></span> {{ 'dashboards.buttons.APPLY_FILTER' | translate }}
|
||||
</div>
|
||||
<div ng-click="clearFilter(gadget.module)" class="filter-clear btn btn-danger">
|
||||
<span class="glyphicon glyphicon-remove"></span> {{ 'dashboards.buttons.CLEAR_FILTER' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,38 @@
|
||||
<button type="button"
|
||||
id="dashboardsViewBtn"
|
||||
subModule="dashborardsView"
|
||||
class="btn btn-default"
|
||||
ng-click="setSubModule($event)">{{ 'dashboards.buttons.VIEW_DASHBOARD' | translate }}</button>
|
||||
|
||||
<button type="button"
|
||||
id="dashboardsCreateBtn"
|
||||
subModule="dashboardsCreate"
|
||||
class="btn btn-default"
|
||||
ng-click="setSubModule($event)">{{ 'dashboards.buttons.CREATE_DASHBOARD' | translate }}</button>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12"
|
||||
id="dashboards-layer"
|
||||
ng-if="isSubmoduleVisible('dashborardsView')"
|
||||
ng-init="getDashborad()">
|
||||
<dashboards-view ng-controller="dashboardsViewCtrl" ng-init="initMyDashborad()"></dashboards-view>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12"
|
||||
id="dashboards-create-layer"
|
||||
ng-if="isSubmoduleVisible('dashboardsCreate')">
|
||||
<h3>{{ 'dashboards.headers.' + getHeaderKey('create') | translate }}</h3>
|
||||
<create-dashboard ng-controller="createDashboardCtrl" ng-init="initCreate()"></create-dashboard>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12"
|
||||
id="dashboards-edit-layer"
|
||||
ng-if="isSubmoduleVisible('dashboardsEdit')">
|
||||
<h3>{{ 'dashboards.headers.' + getHeaderKey('edit') | translate }}</h3>
|
||||
<create-dashboard ng-controller="createDashboardCtrl" ng-init="initCreate()"></create-dashboard>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,42 @@
|
||||
<div class="dashboard-name col-md-12">
|
||||
<div class="col-md-12">
|
||||
<span class="dashborad-selected-name">{{dashboardInfo.name}}</span>
|
||||
<span class="owner-btns" ng-if="dashboardInfo.isOwner">
|
||||
<a href="dashboards?subModule=dashboardsEdit&idDashboard={{dashboardInfo.idDashboard}}">
|
||||
<span class="edit-dashboard-btn glyphicon glyphicon-pencil"></span>
|
||||
</a>
|
||||
<span class="remove-dashborad-btn glyphicon glyphicon-remove" ng-click="showHideRemoveDialog()"></span>
|
||||
</span>
|
||||
<span class="select-dashboard-btn glyphicon glyphicon-menu-hamburger" ng-click="showSelectDashborad()"></span>
|
||||
</div>
|
||||
<div class="select-dashboard-layer col-md-3" ng-if="isSelectDashboardVisible">
|
||||
<h3 class="select-dashboard-title">{{ 'dashboards.headers.SELECT_DASHBOARD' | translate }}</h3>
|
||||
<div class="select-dashborad-group" ng-repeat="(dashboradType, dashborads) in allDashboards">
|
||||
<div class="select-dashboard-type">{{dashboradType}}</div>
|
||||
<div class="dashboard-row" ng-repeat="dashboard in dashborads" ng-click="getMyDashboard(dashboard.idDashboard)">
|
||||
{{dashboard.name}}
|
||||
<span class="{{dashboard.visibility}} visibility-icon glyphicon glyphicon-eye-{{getDashboradIcon(dashboard.visibility)}}"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="dialog-confirm"
|
||||
dialog
|
||||
ng-if="isRemoveDialogVisible"
|
||||
on-confirmation="removeDashboard"
|
||||
on-close="showHideRemoveDialog"
|
||||
is-modal="true"
|
||||
has-buttons="true"
|
||||
parameters="dashboardInfo.idDashboard"
|
||||
title="{{'dashboards.headers.REMOVE_DASHBOARD' | translate}}">
|
||||
<p><span class="glyphicon glyphicon-warning-sign"></span>{{'dashboards.messages.REMOVE_DASHBORAD_CONFIRMATION' | translate}} <b>{{dashboardInfo.name}}</b>?</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="dashboard-gadgets-container" class="row">
|
||||
<div
|
||||
class="gadget-layer col-md-6"
|
||||
ng-repeat="gadget in gadgets">
|
||||
<div class="gadget col-md-12" id="dashboard-gadget-{{gadget.idGadget}}" ng-init="gadgetsDirective(gadget)"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,10 @@
|
||||
<div ng-if="canChangeVisibility()" class="col-md-1 visibility-layer {{visibility.value}}" ng-click="changeVisibility()">
|
||||
<span class="visibility-icon glyphicon glyphicon-eye-{{visibility.icon}}"></span>
|
||||
<span class="visibility-message">{{visibility.value}}</span>
|
||||
</div>
|
||||
<div class="user-type-select-layer col-md-2" ng-if="isPublic()">
|
||||
{{ 'dashboards.headers.FOR' | translate }}
|
||||
<select ng-change="getGadgets()" class="user-type-select" ng-model="$parent.selectedUserType">
|
||||
<option ng-repeat="option in userTypes" value="{{option.id}}">{{option.type}}</option>
|
||||
</select>
|
||||
</div>
|
||||
@@ -0,0 +1,65 @@
|
||||
<div ng-controller="gadgetAssignedOrdersCtrl" ng-init="getAssignedOrdersInfo()" class="order-central-orders">
|
||||
<h3>
|
||||
{{ 'dashboards.headers.ASSIGNED_ORDERS' | translate }}
|
||||
<span ng-if="filterService.isFilterSet(gadget.module)" class="is-fitlered glyphicon glyphicon-filter"></span>
|
||||
</h3>
|
||||
<dashboards-filters
|
||||
ng-if="filterService.isFilterVisible(gadget.module)"
|
||||
ng-init="setFilterParams(gadget.module)"
|
||||
ng-controller="dashboardsFiltersCtrl">
|
||||
</dashboards-filters>
|
||||
<div class="gadget-row col-md-12">
|
||||
<div class="gadget-row-column gadget-header col-md-2">
|
||||
{{ 'dashboards.headers.ORDER' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'orderNumber', 'textFilter')"
|
||||
class="filter-value glyphicon glyphicon-filter"></span>
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'orderNumber')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'orderNumber')}}"></span>
|
||||
</div>
|
||||
<div class="gadget-row-column gadget-header col-md-3">
|
||||
{{ 'dashboards.headers.ASSIGNED_TO' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'assignedTo', 'textFilter')"
|
||||
class="filter-value glyphicon glyphicon-filter"></span>
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'assignedTo')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'assignedTo')}}"></span>
|
||||
</div>
|
||||
<div class="gadget-row-column gadget-header col-md-3">
|
||||
{{ 'dashboards.headers.ORDER_DATE' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'orderDate', 'dateFilter')" class="filter-value glyphicon glyphicon-filter"></span>
|
||||
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'orderDate')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'orderDate')}}"></span>
|
||||
</div>
|
||||
<div class="gadget-row-column gadget-header col-md-2">
|
||||
{{ 'dashboards.headers.TOTAL' | translate }}
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'fixedPrice')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'fixedPrice')}}"></span>
|
||||
</div>
|
||||
<div class="gadget-row-column gadget-header col-md-2">
|
||||
{{ 'dashboards.headers.STATUS' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'status', 'textFilter')" class="filter-value glyphicon glyphicon-filter"></span>
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'status')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'status')}}"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gadget-row col-md-12" ng-repeat="order in orders">
|
||||
<div class="gadget-row-column col-md-2">
|
||||
<a href="orders?subModule=orders_steps&idOrder={{order.idOrder}}&orderNumber={{order.orderNumber}}">{{order.orderNumber}}</a>
|
||||
</div>
|
||||
<div class="gadget-row-column col-md-3">
|
||||
{{order.assignedTo}}
|
||||
</div>
|
||||
<div class="gadget-row-column col-md-3">
|
||||
{{order.orderDate}}
|
||||
</div>
|
||||
<div class="gadget-row-column col-md-2">
|
||||
{{order.fixedPrice}}
|
||||
<div ng-if="order.recurringPrice > 0">
|
||||
({{ 'dashboards.headers.RECURRING' | translate }} {{order.recurringPrice}})
|
||||
</div>
|
||||
</div>
|
||||
<div class="order-status-{{order.status}} gadget-row-column col-md-2">
|
||||
{{order.status}} <span class="{{getStatusIcon(order.status)}}"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,41 @@
|
||||
<div ng-controller="gadgetNextActionsCtrl" class="next-actions">
|
||||
<h3>
|
||||
{{ 'dashboards.headers.NEXT_ACTIONS' | translate }}
|
||||
<span ng-if="filterService.isFilterSet(gadget.module)" class="is-fitlered glyphicon glyphicon-filter"></span>
|
||||
</h3>
|
||||
<dashboards-filters
|
||||
ng-if="filterService.isFilterVisible(gadget.module)"
|
||||
ng-init="setFilterParams(gadget.module)"
|
||||
ng-controller="dashboardsFiltersCtrl">
|
||||
</dashboards-filters>
|
||||
<div class="gadget-row col-md-12">
|
||||
<div class="gadget-row-column gadget-header col-md-2">
|
||||
{{ 'dashboards.headers.ORDER' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'orderNumber', 'textFilter')" class="filter-value glyphicon glyphicon-filter"></span>
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'orderNumber')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'orderNumber')}}"></span>
|
||||
</div>
|
||||
<div class="gadget-row-column gadget-header col-md-4">
|
||||
{{ 'dashboards.headers.ACTION' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'stepAction', 'textFilter')" class="filter-value glyphicon glyphicon-filter"></span>
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'stepAction')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'stepAction')}}"></span>
|
||||
</div>
|
||||
|
||||
<div class="gadget-row-column gadget-header col-md-3">
|
||||
{{ 'dashboards.headers.STATUS' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="gadget-row col-md-12" ng-repeat="action in actions">
|
||||
<div class="gadget-row-column col-md-2">
|
||||
<a href="orders?subModule=orders_steps&idOrder={{action.idOrder}}&orderNumber={{action.orderNumber}}">{{action.orderNumber}}</a>
|
||||
</div>
|
||||
<div class="gadget-row-column col-md-4">
|
||||
{{action.stepAction}}
|
||||
</div>
|
||||
<div class="gadget-row-column col-md-4">
|
||||
<span class="action-status {{action.status}}">{{action.status}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,65 @@
|
||||
<div ng-controller="gadgetOrderCentralCtrl" ng-init="getOrderCentralInfo()" class="order-central-orders">
|
||||
<h3>
|
||||
{{ 'dashboards.headers.ORDER_CENTRAL' | translate }}
|
||||
<span ng-if="filterService.isFilterSet(gadget.module)" class="is-fitlered glyphicon glyphicon-filter"></span>
|
||||
</h3>
|
||||
<dashboards-filters
|
||||
ng-if="filterService.isFilterVisible(gadget.module)"
|
||||
ng-init="setFilterParams(gadget.module)"
|
||||
ng-controller="dashboardsFiltersCtrl">
|
||||
</dashboards-filters>
|
||||
<div class="gadget-row col-md-12">
|
||||
<div class="gadget-row-column gadget-header col-md-2">
|
||||
{{ 'dashboards.headers.ORDER' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'orderNumber', 'textFilter')"
|
||||
class="filter-value glyphicon glyphicon-filter"></span>
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'orderNumber')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'orderNumber')}}"></span>
|
||||
</div>
|
||||
<div class="gadget-row-column gadget-header col-md-3">
|
||||
{{ 'dashboards.headers.ASSIGNED_TO' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'assignedTo', 'textFilter')"
|
||||
class="filter-value glyphicon glyphicon-filter"></span>
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'assignedTo')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'assignedTo')}}"></span>
|
||||
</div>
|
||||
<div class="gadget-row-column gadget-header col-md-3">
|
||||
{{ 'dashboards.headers.ORDER_DATE' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'orderDate', 'dateFilter')" class="filter-value glyphicon glyphicon-filter"></span>
|
||||
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'orderDate')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'orderDate')}}"></span>
|
||||
</div>
|
||||
<div class="gadget-row-column gadget-header col-md-2">
|
||||
{{ 'dashboards.headers.TOTAL' | translate }}
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'fixedPrice')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'fixedPrice')}}"></span>
|
||||
</div>
|
||||
<div class="gadget-row-column gadget-header col-md-2">
|
||||
{{ 'dashboards.headers.STATUS' | translate }}
|
||||
<span ng-click="filterService.showFilter(gadget.module, 'status', 'textFilter')" class="filter-value glyphicon glyphicon-filter"></span>
|
||||
<span ng-click="filterService.sortBy(gadget.module, 'status')"
|
||||
class="sort-icon sort glyphicon {{filterService.getSortIcon(gadget.module, 'status')}}"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gadget-row col-md-12" ng-repeat="order in orders">
|
||||
<div class="gadget-row-column col-md-2">
|
||||
<a href="orders?subModule=orders_steps&idOrder={{order.idOrder}}&orderNumber={{order.orderNumber}}">{{order.orderNumber}}</a>
|
||||
</div>
|
||||
<div class="gadget-row-column col-md-3">
|
||||
{{order.assignedTo}}
|
||||
</div>
|
||||
<div class="gadget-row-column col-md-3">
|
||||
{{order.orderDate}}
|
||||
</div>
|
||||
<div class="gadget-row-column col-md-2">
|
||||
{{order.fixedPrice}}
|
||||
<div ng-if="order.recurringPrice > 0">
|
||||
({{ 'dashboards.headers.RECURRING' | translate }} {{order.recurringPrice}})
|
||||
</div>
|
||||
</div>
|
||||
<div class="order-status-{{order.status}} gadget-row-column col-md-2">
|
||||
{{order.status}} <span class="{{getStatusIcon(order.status)}}"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user