arzynik e5717ef9e9 EXPERIMENTAL order status changes
changed how we get and manage the status of orders and order actions. please be careful as this might break both cockpit.la, cbtn.io, and settlement
2014-11-15 15:14:09 -08:00

127 lines
3.6 KiB
PHP

<?php
class Controller_api_driver_orders extends Crunchbutton_Controller_RestAccount {
public function init() {
$lastHours = 12; // last 12 hours
if( c::getPagePiece( 3 ) ){
switch ( c::getPagePiece( 3 ) ) {
case 'revenue':
$id_admin = c::admin()->id_admin;
$revenueCurrentShift = Admin::revenueCurrentShift( $id_admin );
$revenueLastShift = Admin::revenueLastWorkedShift( $id_admin );
echo json_encode( ['totalCurrent' => $revenueCurrentShift,
'totalLast' => $revenueLastShift] );
break;
case 'undelivered':
$count = 0;
$orders = Order::outstandingOrders();
foreach ( $orders as $order ) {
$count++;
}
echo json_encode( [ 'total' => $count ] );
break;
//To be continued
case 'times':
$id_admin = c::admin()->id_admin;
$avgTimeLastShift = Admin::avgDeliveryTimeLastShift( $id_admin );
$avgTimeCurrentShift = Admin::avgDeliveryTimeCurrentShift( $id_admin );
$orderCountLastShift = Admin::numberOfDeliveredOrdersLastShift( $id_admin );
$orderCountCurrentShift = Admin::numberOfDeliveredOrdersCurrentShift( $id_admin );
echo json_encode( [ 'total_last' => $avgTimeLastShift,
'total_current' => $avgTimeCurrentShift,
'orderCountLast' => $orderCountLastShift,
'orderCountCurrent' => $orderCountCurrentShift ] );
break;
default:
$order = Order::o(c::getPagePiece( 3 ) );
// Test order #2969 - step 3
if( $order->id_order == Cockpit_Driver_Notify::ORDER_TEST ){
$last = Crunchbutton_Order_Action::byOrder( $order->id_order );
// delete last actions so the driver could play with
if( $last->id_order_action && c::user()->id_admin != $last->id_admin && $last->type != Crunchbutton_Order_Action::DELIVERY_REJECTED ){
c::db()->query( 'DELETE FROM order_action WHERE id_order = "' . $order->id_order . '"' );
}
}
if ( $this->method() == 'post' ) {
$res = [];
switch ( c::getPagePiece(4) ) {
case 'delivery-pickedup':
$res['status'] = $order->setStatus(Crunchbutton_Order_Action::DELIVERY_PICKEDUP);
break;
case 'delivery-delivered':
$res['status'] = $order->setStatus(Crunchbutton_Order_Action::DELIVERY_DELIVERED);
break;
case 'delivery-accept':
$res['status'] = $order->setStatus(Crunchbutton_Order_Action::DELIVERY_ACCEPTED, true);
break;
case 'delivery-reject':
$res['status'] = $order->setStatus(Crunchbutton_Order_Action::DELIVERY_REJECTED);
break;
case 'undo':
$res['status'] = $order->undoStatus();
break;
}
$ret['status'] = $order->status()->last();
echo json_encode($ret);
exit;
} else {
if( $order->id_order ) {
echo $order->json();
} else {
echo json_encode(['error' => 'invalid object']);
}
}
break;
}
} else {
$exports = [];
// @demo
$orders = Order::deliveryOrders( $lastHours );
foreach ( $orders as $order ) {
$exports[] = Model::toModel( [
'id_order' => $order->id_order,
'status' => $order->status()->last(),
'name' => $order->name,
'phone' => $order->phone,
'date' => $order->date(),
'date_hour' => $order->date()->format( 'g:i A'),
'restaurant' => $order->restaurant()->name,
] );
}
usort( $exports, function( $a, $b ){
if( $a->lastStatus->status == $b->lastStatus->status ){
return $a->id_order < $b->id_order;
}
return ( $a->lastStatus->order > $b->lastStatus->order );
} );
echo json_encode($exports);
}
}
}