public function saveChangeOrder(Request $request, $id) { $validator = Validator::make($request->all(), ['places' => 'required'], ['places.required' => 'Tempat tidak boleh kosong.']); if ($validator->fails()) { return redirect()->back()->withErrors($validator)->withInput(); } // Order Place $inputPlaces = explode(',', $request->get('places')); $oldPlaces = array_column(OrderPlace::where('order_id', $id)->get()->toArray(), 'place_id'); # Compare For New $diff = array_diff($inputPlaces, $oldPlaces); if (count($diff)) { $places = Place::whereIn('id', $diff)->get(); $orderPlaces = []; foreach ($places as $place) { array_push($orderPlaces, ['order_id' => $id, 'place_id' => $place->id, 'harga' => $place->harga]); } OrderPlace::insert($orderPlaces); } # Compare For Delete $diff = array_diff($oldPlaces, $inputPlaces); if (count($diff)) { OrderPlace::where('order_id', $id)->whereIn('place_id', $diff)->delete(); } $data_order_detail = $request->session()->has('data_order') ? $request->session()->get('data_order') : []; $order = Order::with('place.place')->find($id); if (count($data_order_detail)) { // Order Detail $orderDetailOld = OrderDetail::where('order_id', $id)->whereIn('produk_id', array_keys($data_order_detail))->get(); # Update Order Detail foreach ($orderDetailOld as $odo) { $oldQty = $odo->qty; $updateQty = $oldQty + $data_order_detail[$odo->produk_id]['qty']; $updatePrice = $data_order_detail[$odo->produk_id]['harga']; OrderDetail::find($odo->id)->update(['qty' => $updateQty, 'harga_jual' => $updatePrice]); unset($data_order_detail[$odo->produk_id]); } if (count($data_order_detail)) { # New Order Detail $produks = Produk::with(['detail' => function ($query) { $query->join('bahans', 'produk_details.bahan_id', '=', 'bahans.id'); }])->whereIn('id', array_keys($data_order_detail))->get(); $orderDetailBahan = []; foreach ($produks as $produk) { $pId = $produk->id; // Order Detail $orderDetail = ['order_id' => $id, 'produk_id' => $produk->id, 'hpp' => CountHpp($produk), 'harga_jual' => $data_order_detail[$pId]['harga'], 'qty' => $data_order_detail[$pId]['qty'], 'use_mark_up' => $produk->use_mark_up, 'mark_up' => $produk->mark_up, 'note' => $data_order_detail[$pId]['note']]; //echo "<pre>", print_r($orderDetail), "</pre>"; $orderDetail = OrderDetail::create($orderDetail); if ($produk->detail->count()) { // Order Detail Bahan foreach ($produk->detail as $pd) { array_push($orderDetailBahan, ['order_detail_id' => $orderDetail->id, 'bahan_id' => $pd->bahan_id, 'harga' => $pd->harga, 'qty' => $pd->qty, 'satuan' => $pd->satuan]); } } } OrderDetailBahan::insert($orderDetailBahan); } Artisan::call('bahan:count'); Artisan::call('produk:count'); $request->session()->forget('data_order'); } $tglRedirect = $order->tanggal->format('Y-m-d'); $typeRedirect = $order->place[0]->place->kategori_id; return redirect('/order?tgl=' . $tglRedirect . '&type=' . $typeRedirect)->with('succcess', 'Sukses ubah data order.'); }
public function changeTransaksi(Request $request) { \Debugbar::disable(); $id = $request->get('id'); $data_order_detail = $request->get('data_order') != "" ? json_decode($request->get('data_order'), true) : []; // Convert like data session $temp = []; foreach ($data_order_detail as $d) { $key = $d['id']; $temp[$key] = $d; } $data_order_detail = $temp; $order = \App\Order::with('place.place')->find($id); if (count($data_order_detail)) { // Order Detail $orderDetailOld = \App\OrderDetail::where('order_id', $id)->whereIn('produk_id', array_keys($data_order_detail))->get(); # Update Order Detail foreach ($orderDetailOld as $odo) { $oldQty = $odo->qty; $updateQty = $oldQty + $data_order_detail[$odo->produk_id]['qty']; $updatePrice = $data_order_detail[$odo->produk_id]['harga']; \App\OrderDetail::find($odo->id)->update(['qty' => $updateQty, 'harga_jual' => $updatePrice]); unset($data_order_detail[$odo->produk_id]); } if (count($data_order_detail)) { # New Order Detail $produks = Produk::with(['detail' => function ($query) { $query->join('bahans', 'produk_details.bahan_id', '=', 'bahans.id'); }])->whereIn('id', array_keys($data_order_detail))->get(); $orderDetailBahan = []; foreach ($produks as $produk) { $pId = $produk->id; // Order Detail $orderDetail = ['order_id' => $id, 'produk_id' => $produk->id, 'hpp' => CountHpp($produk), 'harga_jual' => $data_order_detail[$pId]['harga'], 'qty' => $data_order_detail[$pId]['qty'], 'use_mark_up' => $produk->use_mark_up, 'mark_up' => $produk->mark_up, 'note' => ""]; //echo "<pre>", print_r($orderDetail), "</pre>"; $orderDetail = \App\OrderDetail::create($orderDetail); if ($produk->detail->count()) { // Order Detail Bahan foreach ($produk->detail as $pd) { array_push($orderDetailBahan, ['order_detail_id' => $orderDetail->id, 'bahan_id' => $pd->bahan_id, 'harga' => $pd->harga, 'qty' => $pd->qty, 'satuan' => $pd->satuan]); } } } \App\OrderDetailBahan::insert($orderDetailBahan); } } Artisan::call('bahan:count'); Artisan::call('produk:count'); return 1; }