ItemSalesExport.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace App\Exports;
  3. use App\Helpers\CommonMethods;
  4. use App\Models\Recipes;
  5. use App\Models\StaticReports;
  6. use Illuminate\Database\Query\Builder;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Support\Facades\DB;
  9. use Illuminate\Support\Facades\Log;
  10. use Maatwebsite\Excel\Concerns\FromCollection;
  11. use Maatwebsite\Excel\Concerns\ShouldAutoSize;
  12. use Maatwebsite\Excel\Concerns\WithHeadings;
  13. class ItemSalesExport implements FromCollection, WithHeadings, ShouldAutoSize
  14. {
  15. /**
  16. * @return \Illuminate\Support\Collection
  17. */
  18. private $data = null;
  19. private $logo = "";
  20. public function __construct($data){
  21. $this->data = $data;
  22. }
  23. public function collection()
  24. {
  25. $start_date = $this->data['start_date'];
  26. $end_date = $this->data['end_date'];
  27. $file_name = $this->data['file_name'];
  28. $resto_id = CommonMethods::getRestuarantID();
  29. // dd($start_date,$end_date);
  30. $items = Recipes::select('name','arabic_name','price')->withCount('items_sales')->whereHas('items_sales',function($q) use ($start_date,$end_date){
  31. $q->whereBetween(DB::raw('DATE(created_at)'),[$start_date,$end_date]);
  32. })->where('resto_id',$resto_id)->orderBy('items_sales_count','DESC')->get();
  33. // dd($items);
  34. // $status = 'Initial';
  35. // $items = DB::table('tb_dm_order_items')->select(DB::raw('count(recipe_id) as recipe_count'),'recipe_id')
  36. // ->whereIn('order_id',function($query) use($start_date,$end_date,$resto_id,$status){
  37. // $query->select('id')->from('tb_dm_orders')
  38. // ->whereBetween(DB::raw('DATE(created_at)'),[$start_date,$end_date])
  39. // ->where('resto_id',$resto_id)
  40. // ->where('status','!=',"'".$status."'");
  41. // })->groupBy('recipe_id')->orderBy('recipe_count','DESC');
  42. // Log::info("Query: ".$items->toSql());
  43. // Log::info("Binding: ".json_encode($items->getBindings()));
  44. //
  45. // $items = $items->get();
  46. //$query = \DB::getQueryLog();
  47. //dd(($query));
  48. $item_sales = [];
  49. // dd($items[0]->items_sales_count);
  50. if(isset($items) && $items->count() > 0){
  51. foreach($items as $k=>$item){
  52. if($item->items_sales_count > 0){
  53. Log::info("Quantity: ".json_encode($item->items_sales));
  54. // dump($item);
  55. $item_sales[] = array(
  56. //'id'=>$item->id,
  57. 'name'=> $item->name,
  58. 'arabic_name'=>$item->arabic_name,
  59. 'price'=>$item->price,
  60. 'item_sale_orders'=>$item->items_sales_count,
  61. 'item_sold_quantity'=> $item->items_sales->sum('qty'),
  62. 'item_sold_amount'=>number_format($item->items_sales->sum('price')),
  63. );
  64. }
  65. }
  66. }
  67. // dd($item_sales);
  68. $r_item_sales = array(
  69. 'file_name'=>$file_name.'.xlsx',
  70. 'report_type'=>'items',
  71. 'start_date'=>$start_date,
  72. 'end_date'=>$end_date,
  73. 'is_data_found'=>count($item_sales) > 0?"Yes":"No",
  74. 'status'=>'active',
  75. 'searched_by'=>Auth::id(),
  76. 'resto_id'=>$resto_id
  77. );
  78. $r = StaticReports::where('start_date',$start_date)->whereNull('deleted_at')->where('end_date',$end_date)->where('report_type','items')->where('resto_id',$resto_id)->first();
  79. if(!$r){
  80. $report = StaticReports::insert($r_item_sales);
  81. }
  82. return collect($item_sales);
  83. }
  84. public function headings(): array
  85. {
  86. return [
  87. 'Item Name',
  88. 'Item Arabic Name',
  89. 'Item Price',
  90. 'Item Total Orders',
  91. 'Item Total Sold Quantity',
  92. 'Item Total Sold Amount'
  93. ];
  94. }
  95. }