OrderHistoryExport.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace App\Exports;
  3. use App\Helpers\CommonMethods;
  4. use App\Models\Orders;
  5. use App\Models\StaticReports;
  6. use Carbon\Carbon;
  7. use Illuminate\Support\Facades\Auth;
  8. use Maatwebsite\Excel\Concerns\FromCollection;
  9. use Maatwebsite\Excel\Concerns\ShouldAutoSize;
  10. use Maatwebsite\Excel\Concerns\WithColumnFormatting;
  11. use Maatwebsite\Excel\Concerns\WithHeadings;
  12. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  13. use PhpOffice\PhpSpreadsheet\Style\Style;
  14. class OrderHistoryExport implements FromCollection, WithHeadings,ShouldAutoSize,WithColumnFormatting
  15. {
  16. /**
  17. * @return \Illuminate\Support\Collection
  18. */
  19. private $data = null;
  20. private $logo = "";
  21. public function __construct($data){
  22. $this->data = $data;
  23. }
  24. public function collection()
  25. {
  26. $start_date = $this->data['start_date'];
  27. $end_date = $this->data['end_date'];
  28. $file_name = $this->data['file_name'];
  29. $resto_id = CommonMethods::getRestuarantID();
  30. $orders = Orders::with(['restaurants','order_with_discounts','customers'])
  31. ->whereBetween('created_at',[$start_date,$end_date])->where('status','!=','Initial')
  32. ->where('resto_id',$resto_id)
  33. ->get();
  34. $order_history = [];
  35. $status['Has_Delivered'] = 'Delivered';
  36. $status['Placed'] = 'Placed';
  37. $status['Accepted'] = 'Accepted';
  38. $status['Cancelled'] = "Cancelled";
  39. $status['Close'] = "Close";
  40. $status['Rejected_by_User'] = "Rejected By User";
  41. if(isset($orders) && $orders->count() > 0 ){
  42. foreach($orders as $order){
  43. $discount = isset($order->order_with_discounts)?$order->order_with_discounts->discounted_amount:0;
  44. $devliery_discount = isset($order->order_with_discounts)?$order->order_with_discounts->delivery_discount_value:0;
  45. $address = $order->selected_area_formatted;
  46. $lat = $lng = "";
  47. if(empty($address)){
  48. $address = isset($order->customers) && isset($order->customers->main_address)?$order->customers->main_address->address:"";
  49. if(empty($address)){
  50. $address = $order->order_instructions;
  51. }
  52. }
  53. if($this->logo==""){
  54. $this->logo = $order->restaurants->photos->file_name;
  55. }
  56. $orderStatus = null;
  57. if (array_key_exists(ucwords($order->status), $status)){
  58. $orderStatus = $status[ucwords($order->status)];
  59. }else{
  60. $orderStatus=ucwords($order->status);
  61. }
  62. $order_history[] = array(
  63. 'business_name'=>isset($order->restaurants)?$order->restaurants->name:"",
  64. 'outlet_name'=>isset($order->outlet)?$order->outlet->name:"",
  65. 'order_id'=>str_pad($order->id,6,0,STR_PAD_LEFT),
  66. 'placed_at' => Carbon::parse($order->created_at)->format('l, d M Y'),
  67. 'order_status'=>$orderStatus,
  68. 'order_sub_total'=>number_format($order->total_price),
  69. 'discount'=> number_format($discount),
  70. 'delivery_fee'=>$order->delivery_fee,
  71. 'tax'=>0,
  72. 'order_total'=>($order->total_price - $discount) + ($order->delivery_fee - $devliery_discount),
  73. 'channel'=>$order->campaign_type!=""?$order->campaign_type:"Direct",
  74. 'delivery_date'=> $order->order_deliver_time,
  75. 'payment_mode'=>strtolower($order->payment_mode)=="cod"?"Cash on Delivery":"Card",
  76. 'customer_name'=>$order->customer_name,
  77. 'mobile_number'=>isset($order->customers) && isset($order->customers->users)?'+'.$order->customers->users->email:"",
  78. 'address'=> $address,
  79. 'latitude'=>'',
  80. 'longitude'=>''
  81. );
  82. }
  83. }
  84. // dd($order_history[0]);
  85. $r_order = array(
  86. 'file_name'=>$file_name.'.xlsx',
  87. 'report_type'=>'orders',
  88. 'start_date'=>$start_date,
  89. 'end_date'=>$end_date,
  90. 'is_data_found'=>count($order_history) > 0?"Yes":"No",
  91. 'status'=>'active',
  92. 'searched_by'=>Auth::id(),
  93. 'resto_id'=>$resto_id
  94. );
  95. $r = StaticReports::where('start_date',$start_date)->whereNull('deleted_at')->where('end_date',$end_date)->where('report_type','orders')->where('resto_id',$resto_id)->first();
  96. if(!$r){
  97. $report = StaticReports::insert($r_order);
  98. }
  99. return collect($order_history);
  100. }
  101. public function headings(): array
  102. {
  103. return [
  104. 'Business Name',
  105. 'Outlet Name',
  106. 'Order_ID',
  107. 'Placed at',
  108. 'Order Status',
  109. 'Order Sub Total',
  110. 'Discount',
  111. 'Delivery Fee',
  112. 'Tax',
  113. 'Order Total',
  114. 'Channel',
  115. 'Delivery Date',
  116. 'Payment Mode',
  117. 'Customer Name',
  118. 'Mobile Number',
  119. 'Address',
  120. 'Latitude',
  121. 'Longitude'
  122. ];
  123. }
  124. public function columnFormats(): array
  125. {
  126. return [
  127. 'N' => NumberFormat::FORMAT_TEXT
  128. ];
  129. }
  130. }