public static function getStartEndDate($fom, $week)
 {
     $result = array();
     switch ($week) {
         case 1:
             $fom = $fom . '01';
             break;
         case 2:
             $fom = $fom . '08';
             break;
         case 3:
             $fom = $fom . '15';
             break;
         case 4:
             $fom = $fom . '22';
             break;
         case 5:
             $fom = $fom . '29';
             break;
         case 0:
             $result['startDate'] = substr($fom, 0, 4) . substr($fom, 4, 2) . '01';
             $result['endDate'] = str_replace('-', '', date("Y-m-t", strtotime($result['startDate'])));
             return $result;
     }
     $date = new DateTime(DateHelper::formatDate($fom));
     $week = $date->format("W");
     $year = substr($fom, 0, 4);
     $tmp = DateHelper::getStartAndEndDate($week, $year, substr($fom, 4, 2));
     $result['startDate'] = str_replace('-', '', $tmp[0]);
     $result['endDate'] = str_replace('-', '', $tmp[1]);
     // switch($week){
     //     case 0:
     //         $result['startDate'] = $fom . '01';
     //         $result['endDate'] = $fom . '31';
     //         break;
     //     case 1:
     //         $result['startDate'] = date('Ymd', strtotime("first day of this month", $fom));
     //         $result['endDate'] = date('Ymd', strtotime("first Saturday of this month", $fom));
     //         break;
     //     case 2:
     //         $fd = date( "w", strtotime("first day of this month", $fom));
     //         if($fd == 0) {
     //             $result['startDate'] = date('Ymd', strtotime("second Sunday of this month", $fom));
     //             $result['endDate'] = date('Ymd', strtotime("second Saturday of this month", $fom));
     //         } else {
     //             $result['startDate'] = date('Ymd', strtotime("first Sunday of this month", $fom));
     //             $result['endDate'] = date('Ymd', strtotime("second Saturday of this month", $fom));
     //         }
     //         break;
     //     case 3:
     //         $fd = date( "w", strtotime("first day of this month", $fom));
     //         if($fd == 0) {
     //             $result['startDate'] = date('Ymd', strtotime("third Sunday of this month", $fom));
     //             $result['endDate'] = date('Ymd', strtotime("third Saturday of this month", $fom));
     //         } else {
     //             $result['startDate'] = date('Ymd', strtotime("second Sunday of this month", $fom));
     //             $result['endDate'] = date('Ymd', strtotime("third Saturday of this month", $fom));
     //         }
     //         break;
     //     case 4:
     //         $fd = date( "w", strtotime("first day of this month", $fom));
     //         if($fd == 0) {
     //             $result['startDate'] = date('Ymd', strtotime("fourth Sunday of this month", $fom));
     //             $result['endDate'] = date('Ymd', strtotime("fourth Saturday of this month", $fom));
     //         } else {
     //             $result['startDate'] = date('Ymd', strtotime("third Sunday of this month", $fom));
     //             $result['endDate'] = date('Ymd', strtotime("fourth Saturday of this month", $fom));
     //         }
     //         break;
     //     case 5:
     //         $fd = date( "w", strtotime("first day of this month", $fom));
     //         if($fd == 0) {
     //             $result['startDate'] = date('Ymd', strtotime("fifth Sunday of this month", $fom));
     //             $result['endDate'] = date('Ymd', strtotime("last day of this month", $fom));
     //         } else {
     //             $result['startDate'] = date('Ymd', strtotime("fourth Sunday of this month", $fom));
     //             $result['endDate'] = date('Ymd', strtotime("last day of this month", $fom));
     //         }
     //         break;
     // }
     return $result;
 }
 public function setUpBatchProcess($filters, $desc, $db)
 {
     // Reject query whenever $this->connector has not been initialized
     $this->checkConnection();
     // Prepare Query Statement
     $q = "CREATE (n:BatchJob {\n                type: 1, \n                startDate: " . $filters['startDate'] . ",\n                callDay : " . $filters['callDay'] . ",\n                rnCode : " . $filters['rnCode'] . ",\n                startTime : " . $filters['startTime'][0] . ",\n                endTime: " . $filters['startTime'][1] . ",\n                durationMin: " . $filters['duration'][0] . ",\n                durationMax: " . $filters['duration'][1] . ",\n                incomingMin: " . $filters['incoming'][0] . ",\n                incomingMax: " . $filters['incoming'][1] . ",\n                outgoingMin: " . $filters['outgoing'][0] . ",\n                outgoingMax: " . $filters['outgoing'][1] . ",\n                description : '" . $desc . "',\n                startExecTime: " . Carbon\Carbon::now()->timestamp . ",\n                customers: 'unknown',\n                size: 'unknown',\n                database : '" . $db . "',\n                status: 'Processing'\n            }) RETURN ID(n) as nid";
     // Save new Batch Process Information in Neo4J
     $result = $this->connector->sendCypherQuery($q)->getResult()->getTableFormat();
     // Formatting Input for Displaying
     $filters = $this->prepareData($filters);
     $filters['startDate'] = DateHelper::formatDate($filters['startDate'][0]) . ' - ' . DateHelper::formatDate($filters['startDate'][1]);
     $filters['callDay'] = UnaryHelper::arrToReadable($filters['callDay']);
     $filters['rnCode'] = UnaryHelper::arrToReadable($filters['rnCode']);
     $filters['duration'] = UnaryHelper::rangeToReadable($filters['duration'], '');
     $filters['incoming'] = UnaryHelper::rangeToReadable($filters['incoming'], '');
     $filters['outgoing'] = UnaryHelper::rangeToReadable($filters['outgoing'], '');
     $filters['startTime'] = UnaryHelper::rangeToReadable($filters['startTime'], 'time');
     return ['filters' => $filters, 'nid' => $result[0]['nid']];
 }