Advertisement
ronikuchan

pos settle fifo method

Jan 27th, 2020
449
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.28 KB | None | 0 0
  1. if (!empty($Transaksi)) {
  2.                 $produkDibeli = [];
  3.  
  4.                 // variabel for difference promo price with main price
  5.                 $restPromo = 0;
  6.                 $grandRestPromo = 0;
  7.                 foreach ($request->input('produk') as $pesanan) {
  8.                     $idProduk = $pesanan['id'];
  9.                     $jumlahProduk = $pesanan['jumlah'];
  10.  
  11.                     if ($jumlahProduk > 0) {
  12.                         if ($metode_pembayaran == 'tunai') {
  13.                             // update stok qty total header
  14.                             $produk = ProdukMitra::with('detail_satuan')->find($idProduk);
  15.                             $produk->stok = $produk->stok - $jumlahProduk;
  16.                             $produk->save();
  17.  
  18.                             // update stok qty in detail with fifo method
  19.                             // check stok detail base on date
  20.                             $detailProdukMitra = DetailProdukMitra::where('produk_mitra_id', $idProduk)->orderBy('created_at', 'asc')->get();
  21.  
  22.                             // set variable counter jmlBeli
  23.                             $jmlBeliTemp = 0;
  24.                             $jmlBeliTemp = $jumlahProduk;
  25.                             foreach ($detailProdukMitra as $k => $v) {
  26.                                 if ($jmlBeliTemp > 0 ) {
  27.                                     // check atribute qty_akhir > 0
  28.                                     if ($v->qty_akhir > 0) {
  29.                                         // product mitra single row selected by date
  30.                                         $produkMitraSingle = DetailProdukMitra::find($v->_id);
  31.  
  32.                                         // check atribute qty_akhir <= jumlahBeli
  33.                                         if ($jmlBeliTemp <= $v->qty_akhir) {
  34.                                             $res = $v->qty_akhir - $jmlBeliTemp;
  35.                                             $produkMitraSingle->qty_akhir = $res;
  36.                                             $produkMitraSingle->save();
  37.  
  38.                                             // difference price promo and main price to wallet
  39.                                             if ($produk->harga_promo > 0) {
  40.                                                 if ($produk->harga_promo < $v->harga_awal) {
  41.                                                     // find produk with promo
  42.                                                     $ProdukPromo  = ProdukMitra::find($v->produk_mitra_id);
  43.                                                     $restPromo    = ($v->harga_awal - $produk->harga_promo) * $jmlBeliTemp;
  44.                                                     $grandRestPromo  += (int) $restPromo;
  45.  
  46.                                                     //  for email notification promo price
  47.                                                     $listProdukPromo[] = [
  48.                                                         'name'         => $ProdukPromo->name,
  49.                                                         'jumlah'       => (int) $jmlBeliTemp,
  50.                                                         'harga_jual'   => (int) $v->harga_awal,
  51.                                                         'harga_promo'  => (int) $ProdukPromo->harga_promo,
  52.                                                         'subNominal'   => (int) $restPromo,
  53.                                                     ];
  54.                                                     $TransaksiPromo    = $listProdukPromo;
  55.                                                 }
  56.                                                 else {
  57.                                                     $listProdukPromo = null;
  58.                                                 }
  59.                                             }
  60.                                             else {
  61.                                                 $TransaksiPromo    = null;
  62.                                             }
  63.  
  64.                                             // reduce temp jmlBeli
  65.                                             $jmlBeliTemp = $jmlBeliTemp - $jmlBeliTemp;
  66.                                         }
  67.                                         else {
  68.                                             $res = $jmlBeliTemp - $v->qty_akhir;
  69.  
  70.                                             // update stok qty akhir detail
  71.                                             $produkMitraSingle->qty_akhir = 0;
  72.                                             $produkMitraSingle->save();
  73.  
  74.                                             if ($jmlBeliTemp > $v->qty_akhir){
  75.                                                 $jmlBeliTemp = $v->qty_akhir;
  76.                                             }
  77.  
  78.                                             // difference price promo and main price to wallet
  79.                                             if ($produk->harga_promo > 0) {
  80.                                                 if ($produk->harga_promo < $v->harga_awal) {
  81.                                                     // find produk with promo
  82.                                                     $ProdukPromo  = ProdukMitra::find($v->produk_mitra_id);
  83.                                                     $restPromo    = ($v->harga_awal - $produk->harga_promo) * $jmlBeliTemp;
  84.                                                     $grandRestPromo  += (int) $restPromo;
  85.  
  86.                                                     //  for email notification promo price
  87.                                                     $listProdukPromo[] = [
  88.                                                         'name'         => $ProdukPromo->name,
  89.                                                         'jumlah'       => (int) $jmlBeliTemp,
  90.                                                         'harga_jual'   => (int) $v->harga_awal,
  91.                                                         'harga_promo'  => (int) $ProdukPromo->harga_promo,
  92.                                                         'subNominal'   => (int) $restPromo,
  93.                                                     ];
  94.                                                     $TransaksiPromo    = $listProdukPromo;
  95.                                                 }
  96.                                                 else {
  97.                                                     $TransaksiPromo    = null;
  98.                                                 }
  99.                                             }
  100.                                             else {
  101.                                                 // $TransaksiPromo    = $listProdukPromo ? $listProdukPromo : null;
  102.                                             }
  103.  
  104.                                             // reduce temp jmlBeli
  105.                                             $jmlBeliTemp = $res;
  106.                                         }
  107.                                     }
  108.                                 }
  109.                                 else {
  110.                                     // $TransaksiPromo = $listProdukPromo ? $listProdukPromo : null;
  111.                                 }
  112.                             }
  113.                             $TransaksiPromo    = $listProdukPromo ? $listProdukPromo : null;
  114.                         }
  115.  
  116.                         $dataProduk = [
  117.                             'name'         => $produk->name,
  118.                             'jumlah'       => $jumlahProduk,
  119.                             'harga'        => $produk->harga_promo > 0 ? $produk->harga_promo : $produk->harga_jual,
  120.                             'berat_produk' => $produk->berat_kemasan,
  121.                             'satuan'       => $produk->detail_satuan->name,
  122.                         ];
  123.                         $produkDibeli[] = $dataProduk;
  124.  
  125.                         // insert to detail transaction
  126.                         $detail_produk = [
  127.                             'transaksi_id' => $Transaksi->_id,
  128.                             'produk_id' => $idProduk,
  129.                         ];
  130.                         DetailTransaksi::create(array_merge($detail_produk, $dataProduk));
  131.                     }
  132.  
  133.                 }
  134.  
  135.                 if ($metode_pembayaran == 'tunai') {
  136.                     if ($TransaksiPromo != null) {
  137.                         // difference promo price with main price
  138.                         $userMitra = User::find($Transaksi->mitra_id);
  139.                         if ($userMitra) {
  140.                             $userMitra->uang = (int) $userMitra->uang + $grandRestPromo;
  141.                             $userMitra->save();
  142.    
  143.                             // notif email difference price promo and main price to wallet
  144.                             Mail::send(new \App\Mail\SendNotifications(User::find($Transaksi->mitra_id), 'restPricePromo', $TransaksiPromo));
  145.        
  146.                             // input to finance transcation(transaksi_keuangan)
  147.                             $deviationPrice = TransaksiKeuangan::create([
  148.                                 'user_id'           => $Transaksi->mitra_id,
  149.                                 'transaksi_id'      => $Transaksi->id,
  150.                                 'tanggal_transaksi' => date('Y-m-d'),
  151.                                 'tipe'              => "OUT",
  152.                                 'nominal'           => $grandRestPromo,
  153.                                 'saldo_akhir'       => $userMitra->uang,
  154.                                 'tag'               => "SELISIH PROMO",
  155.                                 'keterangan'        => "Selisih Harga Promo dan Harga Pusat",
  156.                                 'status'            => "DONE",
  157.                             ]);
  158.                         }
  159.                     }
  160.                 }
  161.  
  162.                 $Transaksi->produk = $produkDibeli;
  163.  
  164.                 //notifikasi pembayaran
  165.                 Mail::send(new \App\Mail\SendNotifications(Auth::User(), 'order_konsumen', $Transaksi));
  166.  
  167.                 // kirim notif ke cfo
  168.                 $notif = WebConfig::where('name', 'notifCMO')->first();
  169.                 $notif->value = 1;
  170.                 $notif->save();
  171.  
  172.                 return response()->json([
  173.                     'success' => true,
  174.                     'messages' => 'Add Transaksi Success !',
  175.                     'trxcode' => "USR001", //user belanja via pos
  176.                     'data' => $Transaksi,
  177.                 ], 201);
  178.             }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement