Advertisement
Guest User

habib appprovider

a guest
Jul 16th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 30.25 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Provider;
  4.  
  5. use Dompdf\Dompdf;
  6. use App\Controller\AppController;
  7. use Dompdf\Options;
  8. use Bono\Helper\URL;
  9. use App\Library\Notification;
  10. use Norm\Norm;
  11.  
  12. class AppProvider extends \Bono\Provider\Provider
  13. {
  14.     public function initialize()
  15.     {
  16.         $app = $this->app;
  17.  
  18.         $app->filter('auth.authorize', function ($options) use ($app) {
  19.             // if (!isset($_SESSION['user'])) {
  20.             //     echo "<pre>";
  21.             //     print_r('expression');
  22.             // }
  23.             // exit;
  24.             if (is_array($options) && isset($options['uri'])) {
  25.                 $uri = $options['uri'];
  26.             } else {
  27.                 $uri = $options;
  28.             }
  29.  
  30.             switch ($uri) {
  31.                 case '/forgot_password':
  32.                 case '/passwd':
  33.                 case '/search_user/:site':
  34.                 case '/search_worksheet/:ccd_number':
  35.                 case '/myworksheet/detail_edit':
  36.                 case '/chart/:year':
  37.                 case '/chart_byprojecttype/:year':
  38.                 case '/chart_bystatus/:year':
  39.                 case '/chart/:year/:month':
  40.                 case '/chartbyrange/:year/:start/:end':
  41.                 case '/chartbyrangeccs/:year/:start/:end':
  42.                 case '/chartbyrangetype/:year/:start/:end':
  43.                 case '/chart_byprojecttype/:year/:month':
  44.                 case '/chart_bystatus/:year/:month':
  45.                 case '/feedback':
  46.                 case '/feedback/success':
  47.                 case '/feedback/null/update_status':
  48.                 case '/email_remainder_approver':
  49.                 case '/email_remainder_owner':
  50.                 case '/mom':
  51.                 case '/mom/null/dashboard':
  52.                 case '/mom/null/by_ccd':
  53.                 case '/mom/null/by_date':
  54.                 case '/mom/null/create':
  55.                 case '/mom/null/dashboard_detail/:id':
  56.                     return true;
  57.             }
  58.  
  59.             return $options;
  60.         }, 0);
  61.  
  62.         $app->get('/get_data_project', function () use ($app) {
  63.             if (isset($_GET['term'])) {
  64.                 $query = \Norm::factory('Worksheet')->find(array('change_control_number!like' => $_GET['term']))->limit(10);
  65.             } else {
  66.                 $query = \Norm::factory('Worksheet')->find()->limit(10);
  67.             }
  68.  
  69.             $data = array();
  70.             foreach ($query as $key => $value) {
  71.                 $data[$key]['id'] = $value['$id'];
  72.                 $data[$key]['text'] = $value['change_control_number'];
  73.             }
  74.  
  75.             echo json_encode($data);
  76.             exit;
  77.         });
  78.  
  79.         $app->get('/get_data_project_mom', function () use ($app) {
  80.             if (isset($_GET['term'])) {
  81.                 $query = \Norm::factory('Worksheet')->find(array('change_control_number!like' => $_GET['term']))->limit(10);
  82.             } else {
  83.                 $query = \Norm::factory('Worksheet')->find()->limit(10);
  84.             }
  85.  
  86.             $data = array();
  87.             foreach ($query as $key => $value) {
  88.                 $data[$key]['id'] = $value['change_control_number'];
  89.                 $data[$key]['text'] = $value['change_control_number'];
  90.             }
  91.  
  92.             echo json_encode($data);
  93.             exit;
  94.         });
  95.  
  96.         $app->get('/get_data_user', function () use ($app) {
  97.             if (isset($_GET['term'])) {
  98.                 $query = \Norm::factory('User')->find(array('username!like' => $_GET['term']))->limit(10);
  99.             } else {
  100.                 $query = \Norm::factory('User')->find()->limit(10);
  101.             }
  102.  
  103.             $data = array();
  104.             foreach ($query as $key => $value) {
  105.                 $data[$key]['id'] = $value['$id'];
  106.                 $data[$key]['text'] = $value['first_name'].' '.$value['last_name'];
  107.             }
  108.  
  109.             echo json_encode($data);
  110.             exit;
  111.         });
  112.  
  113.         $app->get('/get_data_approver', function () use ($app) {
  114.             if (isset($_GET['term'])) {
  115.                 $query = \Norm::factory('User')->find(array('username!like' => $_GET['term']));
  116.             } else {
  117.                 $query = \Norm::factory('User')->find();
  118.             }
  119.  
  120.             $data = array();
  121.             foreach ($query as $key => $value) {
  122.                 if (in_array('3', $value['role']->toArray())) {
  123.                     $data[$key]['id'] = $value['$id'];
  124.                     $data[$key]['text'] = $value['first_name'].' '.$value['last_name'];
  125.                 }
  126.             }
  127.  
  128.             echo json_encode($data);
  129.             exit;
  130.         });
  131.  
  132.         $app->get('/get_role', function () use ($app) {
  133.             if (isset($_GET['term'])) {
  134.                 $query = \Norm::factory('Role')->find(array('name!like' => $_GET['term']));
  135.             } else {
  136.                 $query = \Norm::factory('Role')->find();
  137.             }
  138.  
  139.             $data = array();
  140.             foreach ($query as $key => $value) {
  141.                 $data[$key]['id'] = $value['$id'];
  142.                 $data[$key]['text'] = $value['name'];
  143.             }
  144.  
  145.             echo json_encode($data);
  146.             exit;
  147.         });
  148.  
  149.         $app->get('/', function () use ($app) {
  150.             $app->redirect(URL::site('dashboard'));
  151.         });
  152.  
  153.         $app->get('/myworksheet/submitted', function () use ($app) {
  154.             $app->response->template('popup_done/popup');
  155.         });
  156.  
  157.         $app->get('/feedback/success', function () use ($app) {
  158.             $app->response->template('feedback/popup_success');
  159.         });
  160.  
  161.         $app->get('/tutorial/:video', function ($video) use ($app) {
  162.             $app->response->data('video', $video);
  163.             $app->response->template('tutorial/index');
  164.         });
  165.  
  166.         $app->get('/help/view', function () use ($app) {
  167.             $helps = \Norm::factory('Help')->find()->sort(array('ordering' => 1));
  168.  
  169.  
  170.             $app->response->data('is_admin', $app->auth_ccm->isAdmin());
  171.             $app->response->data('helps', $helps);
  172.             $app->response->template('help/view');
  173.         });
  174.  
  175.         $app->get('/email_remainder_owner', function () use ($app) {
  176.             $worksheet = \Norm::factory('Worksheet');
  177.  
  178.             $schedule = $worksheet->find();
  179.  
  180.             foreach ($schedule as $key => $value) {
  181.                 $date = strtotime($value['expected_implementation_date']);
  182.                 $today = date('d-m-Y');
  183.                 $tenDays = date('d-m-Y', strtotime("-10 day", $date));
  184.                 $oneMonth = date('d-m-Y', strtotime("-1 month", $date));
  185.  
  186.                 if ($today == $tenDays || $today == $oneMonth) {
  187.                     $this->senEmailRemainder($value);
  188.                 }
  189.             }
  190.             exit;
  191.         });
  192.  
  193.         $app->get('/email_remainder_approver', function () use ($app) {
  194.             $this->senEmailRemainderToApprover();
  195.         });
  196.  
  197.         $app->get('/dashboard', function () use ($app) {
  198.             $worksheet = \Norm::factory('Worksheet');
  199.             $feedback = \Norm::factory('Feedback');
  200.  
  201.             $newest = $worksheet->find(array('status_delete' => 1))->sort(array('_created_time' => -1))->limit(5);
  202.             $myproject = $worksheet->find(array('project_owner' => $_SESSION['user']['$id'], 'status_delete' => 1))->sort(array('_created_time' => -1))->limit(5);
  203.  
  204.             $needapproval = $worksheet->find(array('approval_status' => 4, 'status!ne' => 6, 'status_delete' => 1))->sort(array('_created_time' => -1));
  205.             $count_needmyapproval = $needapproval->count();
  206.  
  207.             if (!$this->app->auth_ccm->isAdmin()) {
  208.                 $count_needmyapproval = 0;
  209.                 $approval = \Norm::factory('Approval')->find(array('user' => $_SESSION['user']['$id'], 'status' => 0));
  210.  
  211.                 $datas = array();
  212.                 foreach ($approval as $key => $value) {
  213.                     array_push($datas, $value['change_control_number']);
  214.                 }
  215.  
  216.                 if ($datas) {
  217.                     $needapproval = $worksheet->find(array('change_control_number!in' => $datas, 'approval_status' => 4, 'status!ne' => 6, 'status_delete' => 1));
  218.                     $count_needmyapproval = $needapproval->count();
  219.                     $needapproval = $needapproval->sort(array('_created_time' => -1));
  220.                 } else {
  221.                     $needapproval = array();
  222.                 }
  223.             }
  224.  
  225.             if ($this->app->auth_ccm->isAdmin()) {
  226.                 $listFeedback = $feedback->find()->limit(5);
  227.  
  228.                 $app->response->data('myproject', $myproject);
  229.                 $app->response->data('needapproval', $needapproval);
  230.                 $app->response->data('list_feedback', $listFeedback);
  231.             } else if ($this->app->auth_ccm->isChangeOwner()) {
  232.                 $listFeedback = $feedback->find(array('change_owner' => $_SESSION['user']['$id']))->limit(5);
  233.  
  234.                 $app->response->data('myproject', $myproject);
  235.                 $app->response->data('list_feedback', $listFeedback);
  236.             } else if ($this->app->auth_ccm->isApprover()) {
  237.                 $listFeedback = $feedback->find(array('approver' => $_SESSION['user']['$id']))->limit(5);
  238.  
  239.                 $app->response->data('needapproval', $needapproval);
  240.                 $app->response->data('list_feedback', $listFeedback);
  241.             } else if ($this->app->auth_ccm->isPCM()) {
  242.                 $listFeedback = $feedback->find()->limit(5);
  243.                 $app->response->data('list_feedback', $listFeedback);
  244.             }
  245.  
  246.             $app->response->data('newest', $newest);
  247.             $app->response->data('count_needmyapproval', $count_needmyapproval);
  248.             $app->response->template('dashboard/index');
  249.         });
  250.  
  251.  
  252.         /* query ke table user, untuk mendapatkan list approver */
  253.         // $app->get('/search_user/:site', function ($site) use ($app) {
  254.         //     $approvers = \Norm::factory('User');
  255.  
  256.         //     // get default approvers (all user yang diset sebagai Priority Approver pada site yang dipilih)
  257.         //     $default_approvers = $approvers->find(array('role!like' => '3', 'site!like' => $site, 'ispriority_approver' => 1))->toArray();
  258.  
  259.         //     // get optional approvers 1 (all user yang memiliki role Approver pada site yang dipilih)
  260.         //     $optional_approvers1 = $approvers->find(array('role!like' => '3', 'site!like' => $site, 'ispriority_approver!ne' => 1))->toArray();
  261.  
  262.  
  263.         //     // get optional approvers 2 (all user yang diset sebagai Priority Approver pada site lain)
  264.         //     $optional_approvers2 = $approvers->find(array('role!like' => '3', 'site!ne' => $site, 'ispriority_approver' => 1))->toArray();
  265.  
  266.         //     $optional_approvers = array_merge($optional_approvers1, $optional_approvers2);
  267.  
  268.         //     $app->response->data('default_approvers', $default_approvers);
  269.         //     $app->response->data('optional_approvers', $optional_approvers1);
  270.         // });
  271.  
  272.         /* Revisi by Putra */
  273.         $app->get('/search_user/:site', function ($site) use ($app) {
  274.             $approvers = \Norm::factory('User');
  275.  
  276.             $list_approvers = $approvers->find(array('role!like' => '"3"', 'site!like' => '"' . $site . '"'));
  277.             $optional_approvers = array();
  278.             $priority_approvers = array();
  279.  
  280.  
  281.             foreach ($list_approvers as $key => $value) {
  282.                 if (!empty($value['ispriority_approver']) && in_array($site, $value['ispriority_approver']->toArray())) {
  283.                     $priority_approvers[] = $value->toArray();
  284.                 } else {
  285.                     $optional_approvers[] = $value->toArray();
  286.                 }
  287.             }
  288.  
  289.             $app->response->data('default_approvers', $priority_approvers);
  290.             $app->response->data('optional_approvers', $optional_approvers);
  291.         });
  292.  
  293.         /* get data for chart project by site per year */
  294.         $app->get('/chart/:year', function ($year) use ($app) {
  295.             $dataseries = $this->getDataChartFactory($year);
  296.             $url = \URL::site('ccd_submission/null/byyear');
  297.  
  298.             $app->response->data('ahrefurl', $url);
  299.             $app->response->data('dataseries', $dataseries);
  300.         });
  301.  
  302.         /* get data for chart project by site per month */
  303.         $app->get('/chart/:year/:month', function ($year, $month) use ($app) {
  304.             $dataseries = $this->getDataChartFactory($year, $month);
  305.             $app->response->data('dataseries', $dataseries);
  306.         });
  307.  
  308.         /* get data for chart project by project type per year */
  309.         $app->get('/chart_byprojecttype/:year', function ($year) use ($app) {
  310.             $dataseries = $this->getDataChartProjectType($year);
  311.             $url = \URL::site('ccd_submission/null/byprojecttype');
  312.  
  313.             $app->response->data('ahrefurl', $url);
  314.             $app->response->data('dataseries', $dataseries);
  315.         });
  316.  
  317.         /* get data for chart project by project type per month */
  318.         $app->get('/chart_byprojecttype/:year/:month', function ($year, $month) use ($app) {
  319.             $dataseries = $this->getDataChartProjectType($year, $month);
  320.             $url = \URL::site('ccd_submission/null/bystatus');
  321.  
  322.             $app->response->data('ahrefurl', $url);
  323.             $app->response->data('dataseries', $dataseries);
  324.         });
  325.  
  326.         $app->get('/chartbyrange/:year/:start/:end', function ($year, $start, $end) use ($app) {
  327.  
  328.             $explode_start = explode('-', $start);
  329.             $new_start = array();
  330.             $new_start[] = $explode_start[2];
  331.             $new_start[] = $explode_start[0];
  332.             $new_start[] = $explode_start[1];
  333.  
  334.             $explode_end = explode('-', $end);
  335.             $new_end = array();
  336.             $new_end[] = $explode_end[2];
  337.             $new_end[] = $explode_end[0];
  338.             $new_end[] = $explode_end[1];
  339.  
  340.             $data_start = implode('-', $new_start);
  341.             $data_end = implode('-', $new_end);
  342.  
  343.             $dataseries = $this->getDataChartByrange($year, $data_start, $data_end);
  344.             $url = \URL::site('ccd_submission/null/byyear');
  345.  
  346.             $app->response->data('ahrefurl', $url);
  347.             $app->response->data('dataseries', $dataseries);
  348.         });
  349.  
  350.         $app->get('/chartbyrangeccs/:year/:start/:end', function ($year, $start, $end) use ($app) {
  351.  
  352.             $explode_start = explode('-', $start);
  353.             $new_start = array();
  354.             $new_start[] = $explode_start[2];
  355.             $new_start[] = $explode_start[0];
  356.             $new_start[] = $explode_start[1];
  357.  
  358.             $explode_end = explode('-', $end);
  359.             $new_end = array();
  360.             $new_end[] = $explode_end[2];
  361.             $new_end[] = $explode_end[0];
  362.             $new_end[] = $explode_end[1];
  363.  
  364.             $data_start = implode('-', $new_start);
  365.             $data_end = implode('-', $new_end);
  366.  
  367.             $dataseries = $this->getDataChartByrangeCcs($year, $data_start, $data_end);
  368.             $url = \URL::site('ccd_submission/null/bystatus');
  369.  
  370.             $app->response->data('ahrefurl', $url);
  371.             $app->response->data('dataseries', $dataseries);
  372.         });
  373.  
  374.         $app->get('/chartbyrangetype/:year/:start/:end', function ($year, $start, $end) use ($app) {
  375.  
  376.             $explode_start = explode('-', $start);
  377.             $new_start = array();
  378.             $new_start[] = $explode_start[2];
  379.             $new_start[] = $explode_start[0];
  380.             $new_start[] = $explode_start[1];
  381.  
  382.             $explode_end = explode('-', $end);
  383.             $new_end = array();
  384.             $new_end[] = $explode_end[2];
  385.             $new_end[] = $explode_end[0];
  386.             $new_end[] = $explode_end[1];
  387.  
  388.             $data_start = implode('-', $new_start);
  389.             $data_end = implode('-', $new_end);
  390.  
  391.             $dataseries = $this->getDataChartByrangeType($year, $data_start, $data_end);
  392.             $url = \URL::site('ccd_submission/null/byprojecttype');
  393.  
  394.             $app->response->data('ahrefurl', $url);
  395.             $app->response->data('dataseries', $dataseries);
  396.         });
  397.  
  398.         /* get data for chart project by project status per year */
  399.         $app->get('/chart_bystatus/:year', function ($year) use ($app) {
  400.             $dataseries = $this->getDataChartStatus($year);
  401.             $url = \URL::site('ccd_submission/null/bystatus');
  402.  
  403.             $app->response->data('ahrefurl', $url);
  404.             $app->response->data('dataseries', $dataseries);
  405.         });
  406.  
  407.         /* get data for chart project by project status per month */
  408.         $app->get('/chart_bystatus/:year/:month', function ($year, $month) use ($app) {
  409.             $dataseries = $this->getDataChartStatus($year, $month);
  410.             $app->response->data('dataseries', $dataseries);
  411.         });
  412.  
  413.  
  414.         $app->hook('controller.create.success', function () use ($app) {
  415.             $app->redirect(f('controller.url'));
  416.         });
  417.  
  418.         $app->hook('controller.update.success', function ($model) use ($app) {
  419.             $segments = $app->request->getSegments();
  420.             $id = isset($segments[2]) ? $segments[2] : null;
  421.             $app->redirect(f('controller.uri').'/'.$id);
  422.         });
  423.  
  424.  
  425.         $app->get('/pdf', function () use ($app) {
  426.             $options = new Options();
  427.             $options->setIsRemoteEnabled(true);
  428.             $dompdf = new Dompdf($options);
  429.  
  430.             $template = $this->app->theme->partial('export/test');
  431.  
  432.             $dompdf->loadHtml($template);
  433.             $dompdf->setPaper('A4', 'portrait');
  434.             $dompdf->render();
  435.             $dompdf->stream('Document', array('Attachment' => false));
  436.  
  437.             exit;
  438.         });
  439.  
  440.         $app->get('/testmail', function () use ($app) {
  441.             $content = '<!DOCTYPE html>
  442.                        <html lang="en">
  443.                        <head>
  444.                            <meta charset="UTF-8">
  445.                            <title>Document</title>
  446.                        </head>
  447.                        <body>
  448.                            <p>Test</p>
  449.                        </body>
  450.                        </html>';
  451.  
  452.             $data = array(
  453.                 array(
  454.                     'email' => 'apriantopramanaputra@gmail.com',
  455.                     'subject' => 'CCD Approval',
  456.                     'content' => $content
  457.                 ),
  458.             );
  459.  
  460.             Notification::emailSend($data);
  461.  
  462.             echo 'xxx';
  463.             exit;
  464.         });
  465.  
  466.         $app->get('/change_ccd_number', function () use ($app) {
  467.             $connection = Norm::getConnection('mysql')->getRaw();
  468.             $statement = $connection->prepare("SELECT * FROM `worksheet` WHERE change_control_number LIKE '%2019%' AND (_created_time BETWEEN '2019-01-01' and '2019-12-30') LIMIT 300");
  469.             $statement->execute();
  470.             $results = $statement->fetchAll(\PDO::FETCH_ASSOC);
  471.  
  472.             for ($i=0; $i < count($results); $i++) {
  473.                 $sequence = $this->getSequence('worksheet');
  474.                 $number = str_pad($sequence, 3, '0', STR_PAD_LEFT);
  475.                 $old_number = $results[$i]['change_control_number'];
  476.                 $new_number = substr_replace($old_number, $number, 4, 3);
  477.  
  478.                 $statement = $connection->prepare("UPDATE action_plan SET change_control_number = ? WHERE change_control_number = ?");
  479.                 $statement->execute(array($new_number, $old_number));
  480.  
  481.                 $statement = $connection->prepare("UPDATE approval SET change_control_number = ? WHERE change_control_number = ?");
  482.                 $statement->execute(array($new_number, $old_number));
  483.  
  484.                 $statement = $connection->prepare("UPDATE project_team SET change_control_number = ? WHERE change_control_number = ?");
  485.                 $statement->execute(array($new_number, $old_number));
  486.  
  487.                 $statement = $connection->prepare("UPDATE worksheet SET change_control_number = ? WHERE change_control_number = ?");
  488.                 $statement->execute(array($new_number, $old_number));
  489.             }
  490.  
  491.             exit;
  492.         });
  493.     }
  494.  
  495.     /* Cheat Start */
  496.     protected function getSequence($collection_name)
  497.     {
  498.         $model = Norm::factory('Sequence');
  499.         $findmodel = $model->findOne(array('table_name' => $collection_name, 'year' => date('Y')));
  500.  
  501.         if ($findmodel) {
  502.             $lastseq = $findmodel['seq'];
  503.             $sequence = $lastseq+1;
  504.  
  505.             $findmodel->set('seq', $sequence);
  506.             $findmodel->save();
  507.         } else {
  508.             $sequence = 1;
  509.  
  510.             $new = $model->newInstance();
  511.             $new->set('table_name', $collection_name);
  512.             $new->set('year', date('Y'));
  513.             $new->set('seq', $sequence);
  514.             $new->save();
  515.         }
  516.  
  517.         return $sequence;
  518.     }
  519.     /* Cheat End */
  520.  
  521.     public function getDataChartFactory($year, $month = null)
  522.     {
  523.         $collection = \Norm::factory('Worksheet');
  524.         $sites = \Norm::factory('Site')->find();
  525.         $defaultquery = array('$created_time!like' => $year);
  526.  
  527.         if ($month != null) {
  528.             $merging = $year.'-'.$month;
  529.             $defaultquery = array('$created_time!like' => $merging);
  530.         }
  531.  
  532.         $dataseries = array();
  533.  
  534.         foreach ($sites as $ks => $site) {
  535.             $queries = array_merge($defaultquery, array('site' => $site['$id'], 'status_delete' => 1));
  536.  
  537.             $projects = $collection->find($queries);
  538.  
  539.             if ($projects->count() > 0) {
  540.                 $count = count($projects->toArray());
  541.                 $data = array('name' => $site['name'], 'y' => $count);
  542.             } else {
  543.                 $data = array('name' => $site['name'], 'y' => 0);
  544.             }
  545.  
  546.             $dataseries[] = $data;
  547.         }
  548.  
  549.         return $dataseries;
  550.     }
  551.  
  552.     public function getDataChartByrange($year, $start, $end)
  553.     {
  554.         $collection = \Norm::factory('Worksheet');
  555.         $sites = \Norm::factory('Site')->find();
  556.         $defaultquery = array('$created_time!gte' => $start, '$created_time!lte' => $end);
  557.  
  558.         $dataseries = array();
  559.  
  560.         foreach ($sites as $ks => $site) {
  561.             $queries = array_merge($defaultquery, array('site' => $site['$id'], 'status_delete' => 1));
  562.  
  563.             $projects = $collection->find($queries);
  564.  
  565.             if ($projects->count() > 0) {
  566.                 $count = count($projects->toArray());
  567.                 $data = array('name' => $site['name'], 'y' => $count);
  568.             } else {
  569.                 $data = array('name' => $site['name'], 'y' => 0);
  570.             }
  571.  
  572.             $dataseries[] = $data;
  573.         }
  574.  
  575.         return $dataseries;
  576.     }
  577.  
  578.     public function getDataChartProjectType($year, $month = null)
  579.     {
  580.         $collection = \Norm::factory('Worksheet');
  581.         $sites = \Norm::factory('Site')->find();
  582.         $types = \Norm::factory('Sysparam')->find(array('groups' => 'Project Type'));
  583.         $defaultquery = array('$created_time!like' => $year);
  584.  
  585.         if ($month != null) {
  586.             $merging = $year.'-'.$month;
  587.             $defaultquery = array('$created_time!like' => $merging);
  588.         }
  589.  
  590.         $dataseries = array();
  591.  
  592.         foreach ($sites as $ks => $site) {
  593.             $eachseries = array();
  594.  
  595.             foreach ($types as $kt => $type) {
  596.                 $queries = array_merge($defaultquery, array('site' => $site['$id'], 'project_type' => $type['key'], 'status_delete' => 1));
  597.                 $projects = $collection->find($queries);
  598.  
  599.                 if ($projects) {
  600.                     $count = count($projects->toArray());
  601.                     $data = array('name' => $type['long_value'], 'y' => $count);
  602.                 } else {
  603.                     $data = array('name' => $type['long_value'], 'y' => 0);
  604.                 }
  605.  
  606.                 $eachseries[] = $data;
  607.             }
  608.  
  609.             $dataseries[] = array('name' => $site['name'], 'data' => $eachseries);
  610.         }
  611.  
  612.         return $dataseries;
  613.     }
  614.  
  615.     public function getDataChartByrangeType($year, $start, $end)
  616.     {
  617.         $collection = \Norm::factory('Worksheet');
  618.         $sites = \Norm::factory('Site')->find();
  619.         $types = \Norm::factory('Sysparam')->find(array('groups' => 'Project Type'));
  620.         $defaultquery = array('$created_time!gte' => $start, '$created_time!lte' => $end);
  621.  
  622.         $dataseries = array();
  623.  
  624.         foreach ($sites as $ks => $site) {
  625.             $eachseries = array();
  626.  
  627.             foreach ($types as $kt => $type) {
  628.                 $queries = array_merge($defaultquery, array('site' => $site['$id'], 'project_type' => $type['key'], 'status_delete' => 1));
  629.                 $projects = $collection->find($queries);
  630.  
  631.                 if ($projects) {
  632.                     $count = count($projects->toArray());
  633.                     $data = array('name' => $type['long_value'], 'y' => $count);
  634.                 } else {
  635.                     $data = array('name' => $type['long_value'], 'y' => 0);
  636.                 }
  637.  
  638.                 $eachseries[] = $data;
  639.             }
  640.  
  641.             $dataseries[] = array('name' => $site['name'], 'data' => $eachseries);
  642.         }
  643.  
  644.         return $dataseries;
  645.     }
  646.  
  647.     public function getDataChartStatus($year, $month = null)
  648.     {
  649.         $collection = \Norm::factory('Worksheet');
  650.         $sites = \Norm::factory('Site')->find();
  651.         $status = \Norm::factory('Sysparam')->find(array('groups' => 'Project Status', 'key!ne' => 1));
  652.         $defaultquery = array('$created_time!like' => $year);
  653.  
  654.         if ($month != null) {
  655.             $merging = $year.'-'.$month;
  656.             $defaultquery = array('$created_time!like' => $merging);
  657.         }
  658.  
  659.         $dataseries = array();
  660.  
  661.         foreach ($sites as $ks => $site) {
  662.             $eachseries = array();
  663.  
  664.             foreach ($status as $kst => $stat) {
  665.                 $queries = array_merge($defaultquery, array('site' => $site['$id'], 'status' => $stat['key'], 'status_delete' => 1));
  666.                 $projects = $collection->find($queries);
  667.  
  668.                 if ($projects) {
  669.                     $count = count($projects->toArray());
  670.                     $data = array('name' => $stat['long_value'], 'y' => $count);
  671.                 } else {
  672.                     $data = array('name' => $stat['long_value'], 'y' => $count);
  673.                 }
  674.  
  675.                 $eachseries[] = $data;
  676.             }
  677.  
  678.             $dataseries[] = array('name' => $site['name'], 'data' => $eachseries);
  679.         }
  680.  
  681.         return $dataseries;
  682.     }
  683.  
  684.     public function getDataChartByrangeCcs($year, $start, $end)
  685.     {
  686.         $collection = \Norm::factory('Worksheet');
  687.         $sites = \Norm::factory('Site')->find();
  688.         $status = \Norm::factory('Sysparam')->find(array('groups' => 'Project Status', 'key!ne' => 1));
  689.         $defaultquery = array('$created_time!gte' => $start, '$created_time!lte' => $end);
  690.  
  691.         // if ($month != null) {
  692.         //     $merging = $year.'-'.$month;
  693.         //     $defaultquery = array('$created_time!like' => $merging);
  694.         // }
  695.  
  696.         $dataseries = array();
  697.  
  698.         foreach ($sites as $ks => $site) {
  699.             $eachseries = array();
  700.  
  701.             foreach ($status as $kst => $stat) {
  702.                 $queries = array_merge($defaultquery, array('site' => $site['$id'], 'status' => $stat['key'], 'status_delete' => 1));
  703.                 $projects = $collection->find($queries);
  704.  
  705.                 if ($projects) {
  706.                     $count = count($projects->toArray());
  707.                     $data = array('name' => $stat['long_value'], 'y' => $count);
  708.                 } else {
  709.                     $data = array('name' => $stat['long_value'], 'y' => $count);
  710.                 }
  711.  
  712.                 $eachseries[] = $data;
  713.             }
  714.  
  715.             $dataseries[] = array('name' => $site['name'], 'data' => $eachseries);
  716.         }
  717.  
  718.         return $dataseries;
  719.     }
  720.  
  721.     protected function senEmailRemainder($entry)
  722.     {
  723.         $userModel = \Norm::factory('User');
  724.         $change_owner = $userModel->findOne($entry['project_owner']);
  725.  
  726.         $content = $this->app->theme->partial(
  727.             'email/remainder',
  728.             array(
  729.                 'entry' => $entry,
  730.                 'change_owner' => $change_owner
  731.             )
  732.         );
  733.  
  734.         $data = array(
  735.             array(
  736.                 'email' => $change_owner['email'],
  737.                 // 'email' => 'mbiebs94@gmail.com',
  738.                 'subject' => '[CCD Implementation] (' . $entry['change_control_number'] .') is due to be implemented!',
  739.                 'content' => $content
  740.             ),
  741.         );
  742.  
  743.         Notification::emailSend($data);
  744.     }
  745.  
  746.     private function rowsArray($sql, $params = array())
  747.     {
  748.         $connection = \Norm::getConnection('mysql')->getRaw();
  749.         $statement = $connection->prepare($sql);
  750.  
  751.         if (empty($params)) {
  752.             $statement->execute();
  753.         } else {
  754.             $statement->execute($params);
  755.         }
  756.  
  757.         $results = $statement->fetchAll(\PDO::FETCH_ASSOC);
  758.  
  759.         return $results;
  760.     }
  761.  
  762.     protected function senEmailRemainderToApprover()
  763.     {
  764.         $data_approval = $this->rowsArray("
  765.            SELECT
  766.                a.change_control_number,
  767.                u.email email_approver,
  768.                w.submit_date,
  769.                us.email email_change_owner,
  770.                CONCAT(us.first_name, ' ', us.last_name) change_owner
  771.            FROM approval a
  772.            INNER JOIN worksheet w ON a.change_control_number = w.change_control_number
  773.            INNER JOIN user u ON a.user = u.id
  774.            INNER JOIN user us ON w.project_owner = us.id
  775.            WHERE a.status = 0 ORDER BY a.user DESC
  776.        ");
  777.  
  778.         $data_per_approver = array();
  779.         foreach ($data_approval as $key => $item) {
  780.             $data_per_approver[$item['email_approver']][$key] = $item;
  781.         }
  782.         ksort($data_per_approver, SORT_NUMERIC);
  783.  
  784.  
  785.         foreach ($data_per_approver as $key => $value) {
  786.             $content = $this->app->theme->partial(
  787.                 'email/approver_reminder',
  788.                 array(
  789.                     'value' => $value
  790.                 )
  791.             );
  792.  
  793.             $data = array(
  794.                 array(
  795.                     'email' => $key,
  796.                     'subject' => '[CCD Approval] The CCDs are waiting for your approval!',
  797.                     'content' => $content
  798.                 ),
  799.             );
  800.  
  801.             Notification::emailSend($data);
  802.         }
  803.     }
  804. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement