Created
August 30, 2019 13:27
-
-
Save esmeromichael/e57f31ec586bb1e275f576f8d2fbbd2b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Repositories\Backend; | |
use App\Models\Order; | |
use App\Repositories\BaseRepository; | |
use App\Helpers\Backend\Utils; | |
use Illuminate\Support\Facades\Crypt; | |
class OrderRepository | |
{ | |
const MODEL = Order::class; | |
protected $properties = ['id', 'subscriber_id', 'status', 'order_code']; | |
protected $includes = [ | |
'subscriber' => 'subscriber', | |
'order_entries' => 'order_entries', | |
'order_delivery_detail' => 'order_delivery_detail', | |
'order_delivery_address' => 'order_delivery_address' | |
]; | |
public function all() | |
{ | |
return Order::all(); | |
} | |
public function getByStatus($status) | |
{ | |
return Order::where('status', $status)->get(); | |
} | |
public function get_all($parameters, $order_by = 'created_at', $sort = 'desc') | |
{ | |
$limit = isset($parameters['limit']) ? (int) $parameters['limit'] : 10; | |
if (isset($parameters['psid'])) { | |
$psid_hashed = hash('sha256', $parameters['psid'], false); | |
$subscriber = Subscriber::where('psid_hashed', $psid_hashed)->first(); | |
if ($subscriber) { | |
$parameters['subscriber_id'] = $subscriber->id; | |
} else { | |
return Utils::format_response(404, 'failed', 'subscriber not found'); | |
} | |
} | |
$where_clauses = Utils::get_where_clause($this->properties, $parameters); | |
$with_keys = Utils::get_with_keys($this->includes, $parameters); | |
$rows = Order::with($with_keys) | |
->where($where_clauses) | |
->orderBy($order_by, $sort) | |
->paginate($limit) | |
->appends(app('request')->except('page')); | |
return $this->filter_all($rows, $with_keys); | |
} | |
protected function filter_all($rows, $keys = []) | |
{ | |
if (count($rows) > 0) { | |
$data = []; | |
foreach ($rows as $row) { | |
$entry = $this->transform_record($row); | |
if (in_array('subscriber', $keys)) { | |
if (!empty($row->subscriber)) { | |
$entry['subscriber'] = [ | |
'id' => $row->subscriber->id, | |
'psid' => Crypt::decryptString($row->subscriber->psid), | |
'first_name' => !empty($row->subscriber->first_name) ? Crypt::decryptString($row->subscriber->first_name) : '', | |
'last_name' => !empty($row->subscriber->last_name) ? Crypt::decryptString($row->subscriber->last_name) : '', | |
]; | |
} | |
} | |
if (in_array('order_entries', $keys)) { | |
if (!empty($row->order_entries)) { | |
$entry['order_entries'] = $this->filter_order_entries($row->order_entries); | |
} | |
} | |
if (in_array('order_delivery_address', $keys)) { | |
if (!empty($row->order_delivery_address)) { | |
$entry['order_delivery_address'] = [ | |
'id' => $row->order_delivery_address->id, | |
'order_id' => $row->order_delivery_address->order_id, | |
'type' => $row->order_delivery_address->type, | |
'label' => $row->order_delivery_address->label, | |
'company' => !empty($row->order_delivery_address->company) ? Crypt::decryptString($row->order_delivery_address->company) : '', | |
'building' => !empty($row->order_delivery_address->building) ? Crypt::decryptString($row->order_delivery_address->building) : '', | |
'floor' => !empty($row->order_delivery_address->floor) ? Crypt::decryptString($row->order_delivery_address->floor) : '', | |
'area' => !empty($row->order_delivery_address->area) ? Crypt::decryptString($row->order_delivery_address->area) : '', | |
'street' => !empty($row->order_delivery_address->street) ? Crypt::decryptString($row->order_delivery_address->street) : '', | |
'landmark' => $row->order_delivery_address->landmark, | |
'city_id' => $row->order_delivery_address->city_id, | |
'city_name' => $row->order_delivery_address->city_name, | |
'province_id' => $row->order_delivery_address->province_id, | |
'province_name' => $row->order_delivery_address->province_name, | |
'remarks' => $row->order_delivery_address->remarks | |
]; | |
} | |
} | |
if (in_array('order_delivery_detail', $keys)) { | |
if (!empty($row->order_delivery_detail)) { | |
$entry['order_delivery_detail'] = [ | |
'id' => $row->order_delivery_detail->id, | |
'order_id' => $row->order_delivery_detail->order_id, | |
'first_name' => !empty($row->order_delivery_detail->first_name) ? $row->order_delivery_detail->first_name : '', | |
'middle_name' => !empty($row->order_delivery_detail->middle_name) ? $row->order_delivery_detail->middle_name : '', | |
'last_name' => !empty($row->order_delivery_detail->last_name) ? $row->order_delivery_detail->last_name : '', | |
'mobile' => !empty($row->order_delivery_detail->mobile) ? $row->order_delivery_detail->mobile : '', | |
'email' => !empty($row->order_delivery_detail->email) ? $row->order_delivery_detail->email : '', | |
'remarks' => $row->order_delivery_detail->remarks, | |
'change_amount' => $row->order_delivery_detail->change_amount, | |
'delivery_time' => $row->order_delivery_detail->delivery_time | |
]; | |
} | |
} | |
$data[] = $entry; | |
} | |
$paginator = [ | |
'total' => $rows->total(), | |
'per_page' => $rows->perPage(), | |
'current_page' => $rows->currentPage(), | |
'last_page' => $rows->lastPage(), | |
'next_page_url' => $rows->nextPageUrl(), | |
'prev_page_url' => $rows->previousPageUrl(), | |
'from' => $rows->firstItem(), | |
'to' => $rows->lastItem(), | |
'has_more_pages' => $rows->hasMorePages(), | |
'links' => $rows->links(), | |
]; | |
return Utils::format_response(200, 'success', 'records found', $data, $paginator); | |
} else { | |
return Utils::format_response(200, 'success', 'no record found'); | |
} | |
} | |
protected function filter_order_entries($rows) | |
{ | |
$data = []; | |
foreach ($rows as $row) { | |
$entry = [ | |
'id' => $row->id, | |
'order_id' => $row->order_id, | |
'meal_type' => $row->meal_type, | |
'item_id' => $row->item_id, | |
'alacarte_id' => $row->alacarte_id, | |
'quantity' => $row->quantity, | |
'name' => $row->name, | |
'pos_code' => $row->pos_code, | |
'price' => $row->price, | |
]; | |
if ($row->meal_type == 'bundle' || $row->meal_type == 'mcsharebox') { | |
// $entry['image'] = env('BASE_PUBLIC_URL') . '/img/items/' . $row->item->image; | |
$entry['item'] = $row->item; | |
$entry['order_entry_details'] = $this->filter_order_entry_details($row->order_entry_details); | |
} else { | |
// $entry['image'] = env('BASE_PUBLIC_URL') . '/img/lacarte/' . $row->alacarte->image; | |
$entry['alacarte'] = $row->alacarte; | |
} | |
$data[] = $entry; | |
} | |
return $data; | |
} | |
protected function filter_order_entry_details($rows) | |
{ | |
$data = []; | |
foreach ($rows as $row) { | |
$entry = [ | |
'id' => $row->id, | |
'order_entry_id' => $row->bag_entry_id, | |
'type' => $row->type, | |
'section' => $row->section, | |
'pos_code' => $row->pos_code, | |
'name' => $row->name, | |
'price' => $row->price, | |
'variance_id' => $row->variance_id, | |
'with_item_variance_id' => $row->with_item_variance_id, | |
'quantity' => $row->quantity | |
]; | |
if ($row->section == 'variance') { | |
$entry['variance'] = $row->variance; | |
} else { | |
$entry['with_item_variance'] = $row->with_item_variance; | |
$entry['with_item_variance']['with_item'] = $row->with_item_variance->with_item; | |
} | |
$data[] = $entry; | |
} | |
return $data; | |
} | |
public function transform_record($row) | |
{ | |
return [ | |
'id' => $row->id, | |
'subscriber_id' => $row->subscriber_id, | |
'order_code' => $row->order_code, | |
'status' => $row->status, | |
'created_at' => $row->created_at, | |
'updated_at' => $row->updated_at | |
]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment