<?php
 namespace VnChocola\Module\Api\CustomerNotVisit;
 use TCMS\APIController;
 use Model;
 class IndexController extends APIController {
 public function getCustomerNotVisit() {
 $limits = \Request::get('limits', "");
 $skip = \Request::get('skip', "");
 $date = \Request::get('date', "");
 $model = Model::load('CustomersModel');
 $collection = $model->getCollection();
 $data = $collection->aggregate([ [ '$addFields' => [ 'id' => [ '$toString' => '$_id' ] ] ], [ '$lookup' => [ 'from' => 'Visit_Customers', 'let' => [ 'id' => '$id' ], 'pipeline' => [ [ '$match' => [ '$expr' => [ '$and' => [ [ '$eq' => [ '$customerID', '$$id' ] ] ] ] ] ], [ '$group' => [ '_id' => '$plate' ] ] ], 'as' => 'plate' ] ], [ '$unwind' => [ 'path' => '$plate' ] ], [ '$lookup' => [ 'from' => 'Visit_Customers', 'let' => [ 'id' => '$id', 'plate' => '$plate._id' ], 'pipeline' => [ [ '$match' => [ '$expr' => [ '$and' => [ [ '$eq' => [ '$customerID', '$$id' ] ], [ '$eq' => [ '$plate', '$$plate' ] ] ] ] ] ], [ '$addFields' => [ 'date' => [ '$substr' => [ '$dateTime', 0, 10 ] ] ] ], [ '$sort' => [ 'dateTime' => -1 ] ] ], 'as' => 'VisitCustomers' ] ], [ '$match' => [ 'VisitCustomers' => [ '$not' => [ '$elemMatch' => [ 'date' => [ '$gt' => (strlen($date) > 0 ? $date : date("Y-m-d")) ] ] ] ] ] ], [ '$addFields' => [ 'VisitCustomer' => [ '$let' => [ 'vars' => [ 'first' => [ '$arrayElemAt' => [ '$VisitCustomers', 0 ] ] ], 'in' => '$$first' ] ] ] ], [ '$sort' => [ 'VisitCustomer.dateTime' => -1 ] ], [ '$skip' => $skip ? (int)$skip : 0 ], [ '$limit' => $limits ? (int)$limits : 100000 ] ]);
 $totalCount = $collection->aggregate([ [ '$addFields' => [ 'id' => [ '$toString' => '$_id' ] ] ], [ '$lookup' => [ 'from' => 'Visit_Customers', 'let' => [ 'id' => '$id' ], 'pipeline' => [ [ '$match' => [ '$expr' => [ '$and' => [ [ '$eq' => [ '$customerID', '$$id' ] ] ] ] ] ], [ '$group' => [ '_id' => '$plate' ] ] ], 'as' => 'plate' ] ], [ '$unwind' => [ 'path' => '$plate' ] ], [ '$lookup' => [ 'from' => 'Visit_Customers', 'let' => [ 'id' => '$id', 'plate' => '$plate._id' ], 'pipeline' => [ [ '$match' => [ '$expr' => [ '$and' => [ [ '$eq' => [ '$customerID', '$$id' ] ], [ '$eq' => [ '$plate', '$$plate' ] ] ] ] ] ], [ '$addFields' => [ 'date' => [ '$substr' => [ '$dateTime', 0, 10 ] ] ] ], [ '$sort' => [ 'dateTime' => -1 ] ] ], 'as' => 'VisitCustomers' ] ], [ '$match' => [ 'VisitCustomers' => [ '$not' => [ '$elemMatch' => [ 'date' => [ '$gt' => (strlen($date) > 0 ? $date : date("Y-m-d")) ] ] ] ] ] ], [ '$count' => 'totalCount' ] ]);
 $arr = array('data' => $data->toArray(), 'totalCount' => $totalCount->toArray()[0]['totalCount']);
 return $this->ok(json_encode($arr));
 }
 public function getExport() {
 $limits = \Request::get('limits', "");
 $skip = \Request::get('skip', "");
 $date = \Request::get('date', "");
 $model = Model::load('CustomersModel');
 $collection = $model->getCollection();
 $data = $collection->aggregate([ [ '$addFields' => [ 'id' => [ '$toString' => '$_id' ] ] ], [ '$lookup' => [ 'from' => 'Visit_Customers', 'let' => [ 'id' => '$id' ], 'pipeline' => [ [ '$match' => [ '$expr' => [ '$and' => [ [ '$eq' => [ '$customerID', '$$id' ] ] ] ] ] ], [ '$group' => [ '_id' => '$plate' ] ] ], 'as' => 'plate' ] ], [ '$unwind' => [ 'path' => '$plate' ] ], [ '$lookup' => [ 'from' => 'Visit_Customers', 'let' => [ 'id' => '$id', 'plate' => '$plate._id' ], 'pipeline' => [ [ '$match' => [ '$expr' => [ '$and' => [ [ '$eq' => [ '$customerID', '$$id' ] ], [ '$eq' => [ '$plate', '$$plate' ] ] ] ] ] ], [ '$addFields' => [ 'date' => [ '$substr' => [ '$dateTime', 0, 10 ] ] ] ], [ '$sort' => [ 'dateTime' => -1 ] ] ], 'as' => 'VisitCustomers' ] ], [ '$match' => [ 'VisitCustomers' => [ '$not' => [ '$elemMatch' => [ 'date' => [ '$gt' => (strlen($date) > 0 ? $date : date("Y-m-d")) ] ] ] ] ] ], [ '$addFields' => [ 'VisitCustomer' => [ '$let' => [ 'vars' => [ 'first' => [ '$arrayElemAt' => [ '$VisitCustomers', 0 ] ] ], 'in' => '$$first' ] ] ] ], [ '$project' => [ 'name' => 1, 'phone' => 1, 'plate' => 1, 'VisitCustomer' => [ 'date' => 1, ], 'VisitCustomers' => [ 'date' => 1, 'purpose' => 1 ] ] ], [ '$sort' => [ 'VisitCustomer.date' => -1 ] ], [ '$skip' => $skip ? (int)$skip : 0 ], [ '$limit' => $limits ? (int)$limits : 100000 ] ]);
 return $this->ok(json_encode($data->toArray()));
 }
 }
 