PageRenderTime 38ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/core/app/Http/Controllers/Api/OrderController.php

https://bitbucket.org/kholidsudrajat/mini-erp-dev
PHP | 264 lines | 219 code | 45 blank | 0 comment | 35 complexity | 466b780df18892aecc9963af539a6dab MD5 | raw file
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Helpers\FormatConverter;
  4. use App\Models;
  5. use App\Order;
  6. use App\OrderDetail;
  7. use App\PaymentMethod;
  8. use App\Shipping;
  9. use App\SupplierOrder;
  10. use DB;
  11. use PDF;
  12. use Illuminate\Http\Request;
  13. class OrderController extends Controller
  14. {
  15. public function index(Request $request)
  16. {
  17. $order = Order::leftjoin('supplier_orders', 'supplier_orders.id', 'supplier_id')
  18. ->leftjoin('shipping', 'shipping.id', '=', 'shipping_id')
  19. ->leftjoin('payment_method', 'payment_method.id', '=', 'payment_type')
  20. ->leftjoin('order_payments', 'orders.id', '=', 'order_id')
  21. ->select([
  22. 'orders.id', 'po_number', 'supplier_orders.nama AS supp', 'shipping.name AS ship', 'payment_method.name AS paym', 'payment_type',
  23. 'shipping_type', 'orders.total', DB::Raw('SUM(order_payments.total) AS pay'), 'status'
  24. ])
  25. ->groupBy('orders.id');
  26. $datatables = app('datatables')->of($order)
  27. ->addColumn('action', function ($order) {
  28. if($order->status != 0){
  29. return '<a onclick="order('.$order->id.')" href="javascript:;" class="bb btn btn-success"><i class="fa fa-eye"></i></a>';
  30. }else{
  31. return '<a onclick="order('.$order->id.')" href="javascript:;" class="bb btn btn-success"><i class="fa fa-eye"></i></a>
  32. <a onclick="orderEdit('.$order->id.')" href="javascript:;" class="bb btn btn-primary"><i class="fa fa-pencil"></i></a>
  33. <a onclick="return deleteData('.$order->id.')" class="bb btn btn-danger"><i class="fa fa-times"></i></a>';
  34. }
  35. })
  36. ->editColumn('total', function ($order){
  37. return str_replace(',','.',number_format($order->total));
  38. })
  39. ->editColumn('pay', function ($order){
  40. return str_replace(',','.',number_format($order->total - $order->pay));
  41. })
  42. ->editColumn('ship', function ($order){
  43. if($order->ship != "")
  44. return $order->ship;
  45. else
  46. return $order->shipping_type;
  47. });
  48. if ($keyword = $request->get('search')['value']) {
  49. $datatables->filterColumn('rownum', 'whereRaw', '@rownum + 1 like ?', ["%{$keyword}%"]);
  50. }
  51. if ($range = $datatables->request->get('range')) {
  52. $rang = explode(":", $range);
  53. if($rang[0] != "Invalid date" && $rang[1] != "Invalid date" && $rang[0] != $rang[1]){
  54. $datatables->whereBetween('orders.created_at', ["$rang[0] 00:00:00", "$rang[1] 23:59:59"]);
  55. }else if($rang[0] != "Invalid date" && $rang[1] != "Invalid date" && $rang[0] == $rang[1]) {
  56. $datatables->whereBetween('orders.created_at', ["$rang[0] 00:00:00", "$rang[1] 23:59:59"]);
  57. }
  58. }
  59. return $datatables->make(true);
  60. }
  61. public function exportpdf(Request $req){
  62. $keyword = $req['keyword'];
  63. $range = explode(":", $req['date']);
  64. $report = Order::leftjoin('supplier_orders', 'supplier_orders.id', 'supplier_id')
  65. ->leftjoin('shipping', 'shipping.id', '=', 'shipping_id')
  66. ->leftjoin('payment_method', 'payment_method.id', '=', 'payment_type')
  67. ->leftjoin('order_payments', 'orders.id', '=', 'order_id')
  68. ->select([
  69. 'orders.id', 'po_number', 'supplier_orders.nama AS supp', 'shipping.name AS ship', 'payment_method.name AS paym', 'payment_type',
  70. 'shipping_type', 'orders.total', DB::Raw('SUM(order_payments.total) AS pay'), 'status'
  71. ]);
  72. $clause = '';
  73. if($keyword != "" && $req['date'] != "")
  74. $clause .= '(po_number LIKE "%'.$keyword.'%" OR supp LIKE "%'.$keyword.'%" OR ship LIKE "%'.$keyword.'%" OR paym LIKE "%'.$keyword.'%") AND orders.created_at BETWEEN "'.$range[0].' 00:00:00" AND "'.$range[1].' 23:59:59"';
  75. elseif($keyword != "" && $req['date'] == "")
  76. $clause .= '(po_number LIKE "%'.$keyword.'%" OR supp LIKE "%'.$keyword.'%" OR ship LIKE "%'.$keyword.'%" OR paym LIKE "%'.$keyword.'%")';
  77. elseif($keyword == "" && $req['date'] != "")
  78. $clause .= 'orders.created_at BETWEEN "'.$range[0].' 00:00:00" AND "'.$range[1].' 23:59:59"';
  79. if($clause != "")
  80. $report = $report->whereRaw($clause);
  81. $report = $report->groupBy('orders.id')->get();
  82. $no = 1;
  83. $html = '<html><head><style>table{border-collapse: collapse; width: 100%; font-size:12px;}table, td, th{border: 1px solid black; padding: 10px; text-align: left;}</style></head><body>';
  84. $html .= '<table><tr><th>#</th><th>Nomor PO</th><th>Supplier</th><th>Shipping</th><th>Payment</th><th>Total</th><th>Sisa Hutang</th></tr>';
  85. foreach($report as $rep){
  86. if($rep->ship != "")
  87. $ship = $rep->ship;
  88. else
  89. $ship = $rep->shipping_type;
  90. $html .= '<tr>';
  91. $html .= '<td>'.$no++.'</td>';
  92. $html .= '<td>'.$rep->po_number.'</td>';
  93. $html .= '<td>'.$rep->supp.'</td>';
  94. $html .= '<td>'.$ship.'</td>';
  95. $html .= '<td>'.$rep->paym.'</td>';
  96. $html .= '<td>'.str_replace(',','.',number_format($rep->total)).'</td>';
  97. $html .= '<td>'.str_replace(',','.',number_format($rep->total - $rep->pay)).'</td>';
  98. $html .= '</tr>';
  99. }
  100. $html .= '</table></body></html>';
  101. if($no > 1){
  102. $filename = date('ymdhis');
  103. $pdf = PDF::loadHtml($html)->setPaper('a4', 'landscape')->output();
  104. if(!is_dir('upload/order-list/'))
  105. mkdir('upload/order-list/', 0777, true);
  106. file_put_contents('upload/order-list/'.$filename.'.pdf', $pdf);
  107. $file = 'upload/order-list/'.$filename.'.pdf';
  108. return $file;
  109. }
  110. }
  111. public function show($id)
  112. {
  113. $order = Order::findOrFail($id);
  114. $detail = OrderDetail::join('models', 'models.id', '=', 'model_id')
  115. ->select(['model_id', 'name', 'model_name', 'qty', 'order_details.price', 'total'])
  116. ->whereOrderId($id)
  117. ->get();
  118. $list = SupplierOrder::pluck('nama', 'id');
  119. $model = Models::select(['id', DB::Raw('CONCAT(name, " - (", model_name, ")") AS name')])
  120. ->pluck('name','id')
  121. ->prepend('Pilih Produk',0);
  122. $shipping = Shipping::pluck('name', 'id');
  123. $payment = PaymentMethod::get();
  124. return response()->json([
  125. 'order' => $order,
  126. 'detail' => $detail,
  127. 'list' => $list,
  128. 'model' => $model,
  129. 'shipping' => $shipping,
  130. 'payment' => $payment,
  131. ], 200);
  132. }
  133. public function update($id, Request $request)
  134. {
  135. $validators = \Validator::make($request->all(), [
  136. 'po_number' => 'required',
  137. 'supplier_id' => 'required',
  138. 'shipping_type' => 'required',
  139. 'shipping_id' => 'required',
  140. 'payment_type' => 'required',
  141. 'total' => 'required',
  142. ]);
  143. if ($validators->fails()) {
  144. return response()->json([
  145. 'status' => 400,
  146. 'message' => 'Some parameters is invalid',
  147. 'validators' => FormatConverter::parseValidatorErrors($validators),
  148. ], 400);
  149. }
  150. $requestData = $request->all();
  151. $order = Order::findOrFail($id);
  152. $order->update($requestData);
  153. return response()->json([
  154. 'status' => 200,
  155. 'message' => 'Update success',
  156. ], 200);
  157. }
  158. public function adddetail($id, Request $request)
  159. {
  160. $total = $request->qty * $request->price;
  161. $requestData = [
  162. 'order_id' => $id,
  163. 'model_id' => $request->model_id,
  164. 'qty' => $request->qty,
  165. 'price' => $request->price,
  166. 'total' => $total
  167. ];
  168. $order = OrderDetail::create($requestData);
  169. $summ = OrderDetail::selectRaw('SUM(total) AS totals')->whereOrderId($id)->first();
  170. $sum = $summ->totals;
  171. $orders = Order::findOrFail($id);
  172. $orders->update(['total' => $sum]);
  173. return response()->json([
  174. 'status' => 200,
  175. 'message' => 'Update success',
  176. ], 200);
  177. }
  178. public function updatedetail($id, Request $request)
  179. {
  180. $total = $request->qty * $request->price;
  181. $requestData = [
  182. 'qty' => $request->qty,
  183. 'price' => $request->price,
  184. 'total' => $total
  185. ];
  186. $order = OrderDetail::whereOrderId($id)->whereModelId($request->model_id)->first();
  187. $order->update($requestData);
  188. $summ = OrderDetail::selectRaw('SUM(total) AS totals')->whereOrderId($id)->first();
  189. $sum = $summ->totals;
  190. $orders = Order::findOrFail($id);
  191. $orders->update(['total' => $sum]);
  192. return response()->json([
  193. 'status' => 200,
  194. 'message' => 'Update success',
  195. ], 200);
  196. }
  197. public function deletedetail($id, Request $request)
  198. {
  199. $order = OrderDetail::whereOrderId($id)->whereModelId($request->model_id)->first();
  200. $order->delete();
  201. $summ = OrderDetail::selectRaw('SUM(total) AS totals')->whereOrderId($id)->first();
  202. $sum = $summ->totals;
  203. $orders = Order::findOrFail($id);
  204. $orders->update(['total' => $sum]);
  205. return response()->json([
  206. 'status' => 200,
  207. 'message' => 'Update success',
  208. ], 200);
  209. }
  210. public function destroy($id)
  211. {
  212. OrderDetail::whereOrderId($id)->delete();
  213. Order::destroy($id);
  214. return response()->json([
  215. 'status' => 200,
  216. 'message' => 'Delete success',
  217. ], 200);
  218. }
  219. }