Novinaldi

Kasir.php

Jan 28th, 2021
656
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. class Kasir extends CI_Controller
  3. {
  4.     public function __construct()
  5.     {
  6.         parent::__construct();
  7.         if ($this->session->userdata('masuk') == true) {
  8.             $this->load->library(['form_validation']);
  9.             $this->load->model('Modelkasir', 'kasir');
  10.             $this->load->model('admin/Modeltransaksineraca', 'neraca');
  11.             return true;
  12.         } else {
  13.             redirect('login/logout');
  14.         }
  15.     }
  16.  
  17.     function buatnomor()
  18.     {
  19.         $username = $this->session->userdata('username');
  20.         $userid = $this->session->userdata('userid');
  21.         $tglhariini = date('Y-m-d');
  22.         $query = $this->db->query("SELECT MAX(jualfaktur) AS nota FROM penjualan WHERE DATE_FORMAT(jualtgl,'%Y-%m-%d') = '$tglhariini' AND jualuserinput ='$username'");
  23.         $hasil = $query->row_array();
  24.         $data  = $hasil['nota'];
  25.  
  26.  
  27.         // $lastNoUrut = substr($data, 10, 5);
  28.         $lastNoUrut = substr($data, -5);
  29.  
  30.         // nomor urut ditambah 1
  31.         $nextNoUrut = $lastNoUrut + 1;
  32.  
  33.         // membuat format nomor transaksi berikutnya
  34.         $nextNoTransaksi = 'KOP' . $userid . date('dmy', strtotime($tglhariini)) . sprintf('%05s', $nextNoUrut);
  35.         return $nextNoTransaksi;
  36.     }
  37.     public function input()
  38.     {
  39.         // $data = [
  40.         //     'jualfaktur' => $this->buatnomor()
  41.         // ];
  42.         // $view = [
  43.         //     'menu' => $this->load->view('template/menu', '', TRUE),
  44.         //     'judul' => '<i class="fa fa-cash-register"></i> Input Kasir Penjualan',
  45.         //     'isi' => $this->load->view('kasir/index', $data, true)
  46.  
  47.         // ];
  48.         // $this->parser->parse('template/main', $view);
  49.  
  50.         $data = [
  51.             'jualfaktur' => $this->buatnomor()
  52.         ];
  53.         $view = [
  54.             'menu' => $this->load->view('template/menu', '', TRUE),
  55.             'judul' => '<i class="fa fa-cash-register"></i> Input Kasir Penjualan',
  56.             'isi' => $this->load->view('layoutkasir/input', $data, true)
  57.  
  58.         ];
  59.         $this->parser->parse('layoutkasir/main', $view);
  60.     }
  61.  
  62.     public function tampildatatemp()
  63.     {
  64.         if ($this->input->is_ajax_request() == true) {
  65.             $jualfaktur = $this->input->post('jualfaktur', true);
  66.             $diskonmember = $this->input->post('diskonmember', true);
  67.  
  68.             $tampildata = $this->kasir->tampildatatemp($jualfaktur);
  69.             $data = [
  70.                 'data' => $tampildata,
  71.                 'diskonmember' => $diskonmember
  72.             ];
  73.             $this->load->view('layoutkasir/datatemp', $data);
  74.         }
  75.     }
  76.  
  77.     public function detailproduk()
  78.     {
  79.         if ($this->input->is_ajax_request() == true) {
  80.             $kode = $this->input->post('kode', true);
  81.             $faktur = $this->input->post('faktur', true);
  82.             $jml = $this->input->post('jml', true);
  83.             $dispersen = $this->input->post('dispersen', true);
  84.             $disuang = $this->input->post('disuang', true);
  85.             $namaproduk = $this->input->post('namaproduk', true);
  86.  
  87.             $cekproduk = $this->kasir->cekproduk($kode, $namaproduk);
  88.  
  89.             if ($cekproduk->num_rows() > 0) {
  90.                 if ($cekproduk->num_rows() === 1) {
  91.                     $row_produk = $cekproduk->row_array();
  92.                     $kodebarcode = $row_produk['kodebarcode'];
  93.                     $stoktersedia = $row_produk['stok_tersedia'];
  94.                     $hargabeli = $row_produk['harga_beli_eceran'];
  95.                     $produkpaket = $row_produk['produkpaket'];
  96.                     $idproduk = $row_produk['id'];
  97.  
  98.                     // Ambil data pengaturan
  99.                     $datapengaturan = $this->db->get_where('pengaturan', ['id' => 1])->row_array();
  100.                     // End
  101.  
  102.                     if ($datapengaturan['stokminus'] == '1' && ($produkpaket == '0' || $produkpaket == '1')) {
  103.                         if ($jml > $stoktersedia) {
  104.                             $msg = [
  105.                                 'error' => 'Maaf Stok tidak cukup'
  106.                             ];
  107.                         } else {
  108.                             $query_cek_temp_jual = $this->db->query("SELECT * FROM temp_jual WHERE detjualfaktur='$faktur' AND detjualkodebarcode='$kodebarcode' AND detjualsatid='$row_produk[satid]'");
  109.  
  110.                             if ($query_cek_temp_jual->num_rows() > 0) {
  111.                                 $row_temp_jual = $query_cek_temp_jual->row_array();
  112.  
  113.                                 $jml_update = $row_temp_jual['detjualjml'] + $jml;
  114.  
  115.                                 $subtotal_update = $jml_update * $row_temp_jual['detjualharga'];
  116.  
  117.                                 $update_temp_saja =  [
  118.                                     'detjualjml' => $jml_update,
  119.                                     'detjualsubtotal' => $subtotal_update
  120.                                 ];
  121.                                 $this->db->where('detjualid', $row_temp_jual['detjualid']);
  122.                                 $this->db->update('temp_jual', $update_temp_saja);
  123.  
  124.                                 // jika Produk Paket
  125.  
  126.                                 if ($produkpaket == 1) {
  127.                                     $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $idproduk]);
  128.  
  129.                                     foreach ($query_produkpaket->result_array() as $paket) :
  130.                                         $paketkodebarcode = $paket['paketkodebarcode'];
  131.                                         $paketjml = $paket['paketjml'];
  132.                                         // Kurangi stok tersedia
  133.                                         $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  134.                                         $row_dataproduk = $query_dataproduk->row_array();
  135.                                         $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  136.  
  137.                                         $this->db->where('kodebarcode', $paketkodebarcode);
  138.                                         $this->db->update('produk', [
  139.                                             'stok_tersedia' => $stok_dataproduk - $paketjml
  140.                                         ]);
  141.                                     // end kurang stok tersedia
  142.                                     endforeach;
  143.  
  144.                                     $msg = ['sukses' => 'berhasil'];
  145.                                 } else {
  146.                                     $msg = ['sukses' => 'berhasil'];
  147.                                 }
  148.                                 // End
  149.                             } else {
  150.  
  151.                                 $qty_satuan = $row_produk['jml_eceran'];
  152.                                 $hargajual = $row_produk['harga_jual_eceran'];
  153.  
  154.                                 $hitung_subtotal = ($jml * $qty_satuan * $hargajual);
  155.                                 $subtotal_bersih = $hitung_subtotal - ($hitung_subtotal * ($dispersen / 100)) - $disuang;
  156.                                 $hitung_diskon = $hitung_subtotal * ($dispersen / 100) + $disuang;
  157.  
  158.                                 $datasimpan_temp = [
  159.                                     'detjualfaktur' => $faktur,
  160.                                     'detjualtgl' => date('Y-m-d'),
  161.                                     'detjualkodebarcode' => $kodebarcode,
  162.                                     'detjualsatid' => $row_produk['satid'],
  163.                                     'detjualsatqty' => $qty_satuan,
  164.                                     'detjualjml' => $jml,
  165.                                     'detjualharga' => $hargajual,
  166.                                     'detjualhargabeli' => $hargabeli,
  167.                                     'detjualuserinput' => $this->session->userdata('username'),
  168.                                     'detjualdispersen' => $dispersen,
  169.                                     'detjualdisuang' => $disuang,
  170.                                     'detjualsubtotalkotor' => $hitung_subtotal,
  171.                                     'detjualsubtotal' => $subtotal_bersih,
  172.                                     'detjualdiskon' => $hitung_diskon
  173.                                 ];
  174.                                 $this->db->insert('temp_jual', $datasimpan_temp);
  175.  
  176.                                 // jika Produk Paket
  177.  
  178.                                 if ($produkpaket == 1) {
  179.                                     $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $idproduk]);
  180.  
  181.                                     foreach ($query_produkpaket->result_array() as $paket) :
  182.                                         $paketkodebarcode = $paket['paketkodebarcode'];
  183.                                         $paketjml = $paket['paketjml'];
  184.                                         // Kurangi stok tersedia
  185.                                         $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  186.                                         $row_dataproduk = $query_dataproduk->row_array();
  187.                                         $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  188.  
  189.                                         $this->db->where('kodebarcode', $paketkodebarcode);
  190.                                         $this->db->update('produk', [
  191.                                             'stok_tersedia' => $stok_dataproduk - ($paketjml * $jml)
  192.                                         ]);
  193.                                     // end kurang stok tersedia
  194.                                     endforeach;
  195.  
  196.                                     $msg = ['sukses' => 'berhasil'];
  197.                                 } else {
  198.                                     $msg = ['sukses' => 'berhasil'];
  199.                                 }
  200.                                 // End
  201.  
  202.                             }
  203.                         }
  204.                     } else {
  205.                         $query_cek_temp_jual = $this->db->query("SELECT * FROM temp_jual WHERE detjualfaktur='$faktur' AND detjualkodebarcode='$kodebarcode' AND detjualsatid='$row_produk[satid]'");
  206.  
  207.                         if ($query_cek_temp_jual->num_rows() > 0) {
  208.                             $row_temp_jual = $query_cek_temp_jual->row_array();
  209.  
  210.                             $jml_update = $row_temp_jual['detjualjml'] + $jml;
  211.  
  212.                             $subtotal_update = $jml_update * $row_temp_jual['detjualharga'];
  213.  
  214.                             $update_temp_saja =  [
  215.                                 'detjualjml' => $jml_update,
  216.                                 'detjualsubtotal' => $subtotal_update
  217.                             ];
  218.                             $this->db->where('detjualid', $row_temp_jual['detjualid']);
  219.                             $this->db->update('temp_jual', $update_temp_saja);
  220.  
  221.                             // jika Produk Paket
  222.  
  223.                             if ($produkpaket == 1) {
  224.                                 $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $idproduk]);
  225.  
  226.                                 foreach ($query_produkpaket->result_array() as $paket) :
  227.                                     $paketkodebarcode = $paket['paketkodebarcode'];
  228.                                     $paketjml = $paket['paketjml'];
  229.                                     // Kurangi stok tersedia
  230.                                     $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  231.                                     $row_dataproduk = $query_dataproduk->row_array();
  232.                                     $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  233.  
  234.                                     $this->db->where('kodebarcode', $paketkodebarcode);
  235.                                     $this->db->update('produk', [
  236.                                         'stok_tersedia' => $stok_dataproduk - $paketjml
  237.                                     ]);
  238.                                 // end kurang stok tersedia
  239.                                 endforeach;
  240.  
  241.                                 $msg = ['sukses' => 'berhasil'];
  242.                             } else {
  243.                                 $msg = ['sukses' => 'berhasil'];
  244.                             }
  245.                             // End
  246.                         } else {
  247.  
  248.                             $qty_satuan = $row_produk['jml_eceran'];
  249.                             $hargajual = $row_produk['harga_jual_eceran'];
  250.  
  251.                             $hitung_subtotal = ($jml * $qty_satuan * $hargajual);
  252.                             $subtotal_bersih = $hitung_subtotal - ($hitung_subtotal * ($dispersen / 100)) - $disuang;
  253.                             $hitung_diskon = $hitung_subtotal * ($dispersen / 100) + $disuang;
  254.  
  255.                             $datasimpan_temp = [
  256.                                 'detjualfaktur' => $faktur,
  257.                                 'detjualtgl' => date('Y-m-d'),
  258.                                 'detjualkodebarcode' => $kodebarcode,
  259.                                 'detjualsatid' => $row_produk['satid'],
  260.                                 'detjualsatqty' => $qty_satuan,
  261.                                 'detjualjml' => $jml,
  262.                                 'detjualharga' => $hargajual,
  263.                                 'detjualhargabeli' => $hargabeli,
  264.                                 'detjualuserinput' => $this->session->userdata('username'),
  265.                                 'detjualdispersen' => $dispersen,
  266.                                 'detjualdisuang' => $disuang,
  267.                                 'detjualsubtotalkotor' => $hitung_subtotal,
  268.                                 'detjualsubtotal' => $subtotal_bersih,
  269.                                 'detjualdiskon' => $hitung_diskon
  270.                             ];
  271.                             $this->db->insert('temp_jual', $datasimpan_temp);
  272.  
  273.                             // jika Produk Paket
  274.  
  275.                             if ($produkpaket == 1) {
  276.                                 $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $idproduk]);
  277.  
  278.                                 foreach ($query_produkpaket->result_array() as $paket) :
  279.                                     $paketkodebarcode = $paket['paketkodebarcode'];
  280.                                     $paketjml = $paket['paketjml'];
  281.                                     // Kurangi stok tersedia
  282.                                     $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  283.                                     $row_dataproduk = $query_dataproduk->row_array();
  284.                                     $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  285.  
  286.                                     $this->db->where('kodebarcode', $paketkodebarcode);
  287.                                     $this->db->update('produk', [
  288.                                         'stok_tersedia' => $stok_dataproduk - ($paketjml * $jml)
  289.                                     ]);
  290.                                 // end kurang stok tersedia
  291.                                 endforeach;
  292.  
  293.                                 $msg = ['sukses' => 'berhasil'];
  294.                             } else {
  295.                                 $msg = ['sukses' => 'berhasil'];
  296.                             }
  297.                             // End
  298.  
  299.                         }
  300.                     }
  301.                 } else {
  302.                     $data = [
  303.                         'tampildata' => $cekproduk
  304.                     ];
  305.                     $msg = ['banyakdata' => $this->load->view('layoutkasir/modaldatacariproduk', $data, true)];
  306.                 }
  307.             } else {
  308.                 $msg = ['error' => 'Kode produk tidak ditemukan'];
  309.             }
  310.  
  311.             echo json_encode($msg);
  312.         }
  313.     }
  314.  
  315.     public function hapusitem()
  316.     {
  317.         if ($this->input->is_ajax_request() == true) {
  318.             $id = $this->input->post('id', true);
  319.             $kode = $this->input->post('kode', true);
  320.             $jml = $this->input->post('jml', true);
  321.  
  322.             $ambil_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $kode])->row_array();
  323.  
  324.             if ($ambil_dataproduk['produkpaket'] == 1) {
  325.                 $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $ambil_dataproduk['id']]);
  326.  
  327.                 foreach ($query_produkpaket->result_array() as $paket) :
  328.                     $paketkodebarcode = $paket['paketkodebarcode'];
  329.                     $paketjml = $paket['paketjml'];
  330.                     // Kurangi stok tersedia
  331.                     $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  332.                     $row_dataproduk = $query_dataproduk->row_array();
  333.                     $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  334.  
  335.                     $this->db->where('kodebarcode', $paketkodebarcode);
  336.                     $this->db->update('produk', [
  337.                         'stok_tersedia' => $stok_dataproduk + ($paketjml * $jml)
  338.                     ]);
  339.                 // end kurang stok tersedia
  340.                 endforeach;
  341.  
  342.                 //hapus item pada table temp
  343.                 $this->db->delete('temp_jual', ['detjualid' => $id]);
  344.  
  345.                 $msg = [
  346.                     'sukses' => 'berhasil'
  347.                 ];
  348.             } else {
  349.                 //hapus item pada table temp
  350.                 $this->db->delete('temp_jual', ['detjualid' => $id]);
  351.  
  352.                 $msg = [
  353.                     'sukses' => 'berhasil'
  354.                 ];
  355.             }
  356.  
  357.             echo json_encode($msg);
  358.         }
  359.     }
  360.  
  361.     public function carimember()
  362.     {
  363.         if ($this->input->is_ajax_request() == true) {
  364.             $this->load->view('kasir/modalcarimember');
  365.         }
  366.     }
  367.  
  368.     public function ambildatamember()
  369.     {
  370.         if ($this->input->is_ajax_request() == true) {
  371.             $this->load->model('admin/member/Modelmember', 'member');
  372.             $list = $this->member->get_datatables();
  373.             $data = array();
  374.             $no = $_POST['start'];
  375.  
  376.             $data_diskonmember = $this->db->get('member_setting_diskon')->row_array();
  377.             foreach ($list as $field) {
  378.                 $no++;
  379.                 $row = array();
  380.  
  381.                 $row[] = $no;
  382.                 $row[] = $field->memberkode;
  383.                 $row[] = $field->membernama;
  384.                 $row[] = $field->membertelp;
  385.                 $row[] = $field->memberalamat;
  386.                 $row[] = "<button type=\"button\" class=\"btn btn-sm btn-outline-info\" onclick=\"pilih('" . $field->memberkode . "','" . $field->membernama . "','" . $data_diskonmember['diskon'] . "')\"><i class=\"fa fa-hand-point-up\"></i></button>";
  387.                 $data[] = $row;
  388.             }
  389.  
  390.             $output = array(
  391.                 "draw" => $_POST['draw'],
  392.                 "recordsTotal" => $this->member->count_all(),
  393.                 "recordsFiltered" => $this->member->count_filtered(),
  394.                 "data" => $data,
  395.             );
  396.             //output dalam format JSON
  397.             echo json_encode($output);
  398.         } else {
  399.             exit('Maaf data tidak bisa ditampilkan');
  400.         }
  401.     }
  402.  
  403.     public function pembayaran()
  404.     {
  405.         if ($this->input->is_ajax_request() == true) {
  406.             $faktur = $this->input->post('faktur', true);
  407.             $kodemember = $this->input->post('kodemember', true);
  408.             $namamember = $this->input->post('namamember', true);
  409.             $total_kotor = $this->input->post('total_kotor', true);
  410.             $total_bersih_semua = $this->input->post('total_bersih_semua', true);
  411.             $pembulatan = $this->input->post('pembulatan', true);
  412.             $dispersen =  $this->input->post('dispersensemua', true);
  413.             $disuang =  $this->input->post('disuangsemua', true);
  414.  
  415.             $cek_data_temp = $this->db->get_where('temp_jual', ['detjualfaktur' => $faktur, 'detjualuserinput' => $this->session->userdata('username')]);
  416.  
  417.             if ($cek_data_temp->num_rows() > 0) {
  418.                 $data = [
  419.                     'faktur' => $faktur,
  420.                     'kodemember' => $kodemember,
  421.                     'namamember' => $namamember,
  422.                     'total_kotor' => $total_kotor,
  423.                     'total_bersih_semua' => $total_bersih_semua,
  424.                     'pembulatan' => ($pembulatan == 0) ? $total_bersih_semua : $pembulatan,
  425.                     'dispersensemua' => $dispersen,
  426.                     'disuangsemua' => $disuang
  427.                 ];
  428.                 $msg = [
  429.                     'sukses' => $this->load->view('kasir/modalpembayaran', $data, true)
  430.                 ];
  431.             } else {
  432.                 $msg = ['error' => 'Item belum ada.'];
  433.             }
  434.             echo json_encode($msg);
  435.         }
  436.     }
  437.  
  438.     function bataltransaksi()
  439.     {
  440.         if ($this->input->is_ajax_request() == true) {
  441.             $faktur = $this->input->post('faktur', true);
  442.             $username = $this->session->userdata('username');
  443.  
  444.             $cekfaktur_temp_jual = $this->db->get_where('temp_jual', ['detjualfaktur' => $faktur, 'detjualuserinput' => $username]);
  445.  
  446.             if ($cekfaktur_temp_jual->num_rows() > 0) {
  447.                 // Mengembalikan Stok, jika yang dihapus adalah produk paket
  448.                 $query_penjualan_detail = $this->db->get_where('temp_jual', ['detjualfaktur' => $faktur]);
  449.                 foreach ($query_penjualan_detail->result_array() as $penjualanDetail) :
  450.                     $detjualkodebarcode = $penjualanDetail['detjualkodebarcode'];
  451.                     $detjualjml = $penjualanDetail['detjualjml'];
  452.                     $cek_produk = $this->db->get_where('produk', ['kodebarcode' => $detjualkodebarcode])->row_array();
  453.                     if ($cek_produk['produkpaket'] == '1') {
  454.                         $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $cek_produk['id']]);
  455.  
  456.                         foreach ($query_produkpaket->result_array() as $paket) :
  457.                             $paketkodebarcode = $paket['paketkodebarcode'];
  458.                             $paketjml = $paket['paketjml'];
  459.                             // Kurangi stok tersedia
  460.                             $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  461.                             $row_dataproduk = $query_dataproduk->row_array();
  462.                             $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  463.  
  464.                             $this->db->where('kodebarcode', $paketkodebarcode);
  465.                             $this->db->update('produk', [
  466.                                 'stok_tersedia' => $stok_dataproduk + ($paketjml * $detjualjml)
  467.                             ]);
  468.                         // end kurang stok tersedia
  469.                         endforeach;
  470.                     }
  471.                 endforeach;
  472.                 // End
  473.                 $this->db->delete('temp_jual', ['detjualfaktur' => $faktur, 'detjualuserinput' => $username]);
  474.  
  475.                 $msg = ['sukses' => 'Berhasil dihapus'];
  476.             } else {
  477.                 $msg = ['error' => 'Tidak ada yang dibatalkan'];
  478.             }
  479.             echo json_encode($msg);
  480.         }
  481.     }
  482.  
  483.     public function simpantransaksi()
  484.     {
  485.         if ($this->input->is_ajax_request() == true) {
  486.             $faktur = $this->input->post('faktur', true);
  487.             $kodemember = $this->input->post('kodemember', true);
  488.             $namamember = $this->input->post('namamember', true);
  489.             $statusbayar = $this->input->post('jenispembayaran', true);
  490.             $tglpembayaran = $this->input->post('tglpembayaran', true);
  491.             $totalkotor = $this->input->post('total_kotor', true);
  492.             $diskonpersen = $this->input->post('dispersensemua', true);
  493.             $diskonuang = $this->input->post('disuangsemua', true);
  494.             $totalbersih = $this->input->post('total_bersih_semua', true);
  495.             $pembulatan = $this->input->post('pembulatan', true);
  496.             $sisapembulatan = $pembulatan - $totalbersih;
  497.             $jumlahuang = str_replace(",", "", $this->input->post('jumlahuang', true));
  498.             $sisa = str_replace(",", "", $this->input->post('sisa', true));
  499.  
  500.             if ($statusbayar == 'T') {
  501.                 $input_tglpembayaran = '0000-00-00';
  502.                 $statuslunas = '1';
  503.             } else {
  504.                 $input_tglpembayaran = $tglpembayaran;
  505.                 $statuslunas = '0';
  506.             }
  507.  
  508.             $username = $this->session->userdata('username');
  509.             $hitung_diskon = $totalkotor * ($diskonpersen / 100) + $diskonuang;
  510.  
  511.             if ($statusbayar == 'K' && (strlen($kodemember) == 0 || $kodemember == '-')) {
  512.                 $msg = [
  513.                     'error' => 'Maaf untuk pembayaran kredit, member tidak boleh kosong'
  514.                 ];
  515.             } else {
  516.                 //simpan penjualan
  517.                 $simpan_penjualan = [
  518.                     'jualfaktur' => $faktur,
  519.                     'jualtgl' => date('Y-m-d H:i:s'),
  520.                     'jualmemberkode' => $kodemember,
  521.                     'jualstatusbayar' => $statusbayar,
  522.                     'jualtotalkotor' => $totalkotor,
  523.                     'jualdispersen' => $diskonpersen,
  524.                     'jualdisuang' => $diskonuang,
  525.                     'jualtotalbersih' => $totalbersih,
  526.                     'jualstatuslunas' => $statuslunas,
  527.                     'jualtgljatuhtempo' => $input_tglpembayaran,
  528.                     'jualjmluangbayar' => $jumlahuang,
  529.                     'jualjmluangsisa' => $sisa,
  530.                     'jualuserinput' => $username,
  531.                     'jualdiskon' => $hitung_diskon,
  532.                     'jualpembulatan' => $pembulatan,
  533.                     'jualsisapembulatan' => $sisapembulatan
  534.                 ];
  535.                 $this->db->insert('penjualan', $simpan_penjualan);
  536.  
  537.                 //simpan penjualan detail
  538.                 $this->db->query("INSERT INTO penjualan_detail(detjualfaktur,detjualtgl,detjualkodebarcode,detjualsatid,detjualsatqty,detjualjml,detjualharga,detjualhargabeli,detjualsubtotal,detjualuserinput,detjualdispersen,detjualdisuang,detjualsubtotalkotor,detjualdiskon) (SELECT detjualfaktur,detjualtgl,detjualkodebarcode,detjualsatid,detjualsatqty,detjualjml,detjualharga,detjualhargabeli,detjualsubtotal,detjualuserinput,detjualdispersen,detjualdisuang,detjualsubtotalkotor,detjualdiskon FROM temp_jual WHERE detjualfaktur='$faktur' AND detjualuserinput='$username')");
  539.  
  540.                 // Tambah Diskon Member
  541.                 if (strlen($kodemember) > 0) {
  542.                     $ambil_datamember = $this->db->get_where('member', ['memberkode' => $kodemember])->row_array();
  543.                     $membertotaldiskon = $ambil_datamember['membertotaldiskon'];
  544.                     $ambil_datamembersettingdiskon = $this->db->get('member_setting_diskon')->row_array();
  545.                     $diskon_setting = $ambil_datamembersettingdiskon['diskon'];
  546.  
  547.                     $hitung_tabungandiskonmember = $totalbersih * ($diskon_setting / 100);
  548.  
  549.                     $this->db->where('memberkode', $kodemember);
  550.                     $this->db->update('member', [
  551.                         'membertotaldiskon' => $membertotaldiskon + $hitung_tabungandiskonmember
  552.                     ]);
  553.  
  554.                     // Tambahkan ke Neraca 2-130 Simpanan tabungan member
  555.                     $this->neraca->simpanantabunganmember($faktur, $diskon_setting);
  556.                 }
  557.                 // End Tambah Diskon Member
  558.  
  559.                 // Hapus temp jual
  560.                 $this->db->delete('temp_jual', ['detjualfaktur' => $faktur, 'detjualuserinput' => $username]);
  561.  
  562.  
  563.                 // Neraca 1-160 Persediaan Barang Dagang
  564.                 $ambildata_penjualan_detail = $this->db->query("SELECT SUM(detjualjml*detjualhargabeli) AS total_harga,detjualtgl FROM penjualan_detail JOIN produk on produk.`kodebarcode`=detjualkodebarcode WHERE detjualfaktur ='$faktur' AND produkpaket BETWEEN 0 and 1");
  565.                 $row_penjualan_detail = $ambildata_penjualan_detail->row_array();
  566.  
  567.                 $this->neraca->debit_persediaan_dagang_penjualan($faktur, $row_penjualan_detail['detjualtgl'], $row_penjualan_detail['total_harga']);
  568.  
  569.                 // neraca 1-161 Persediaan saldo Pulsa
  570.                 $penjualandetail_pulsa = $this->db->query("SELECT SUM(detjualjml*detjualhargabeli) AS total_harga,detjualtgl FROM penjualan_detail JOIN produk on produk.`kodebarcode`=detjualkodebarcode WHERE detjualfaktur ='$faktur' AND produkpaket = 2")->row_array();
  571.                 $this->neraca->debit_persediaan_pulsa($faktur, $penjualandetail_pulsa['detjualtgl'], $penjualandetail_pulsa['total_harga']);
  572.  
  573.                 // Neraca No.akun 1-130 Piutang Dagang
  574.                 $this->neraca->kredit_piutang_dagang($faktur);
  575.  
  576.                 // Neraca akun 4-100 & 4-110
  577.                 $this->neraca->simpan_neraca_penjualan($faktur, $totalbersih);
  578.  
  579.                 // Neraca Tambah Kas Kecil
  580.                 if ($statusbayar == 'T') {
  581.                     $transket = "Transaksi Penjualan $faktur";
  582.                     $this->db->insert('neraca_transaksi', [
  583.                         'transno' => $faktur,
  584.                         'transtgl' => date('Y-m-d'),
  585.                         'transnoakun' => '1-110',
  586.                         'transjenis' => 'K',
  587.                         'transjml' => $pembulatan,
  588.                         'transket' => $transket
  589.                     ]);
  590.                 }
  591.                 // End Tambah Kas Kecil
  592.                 $msg = [
  593.                     'sukses' => 'Transaksi berhasil disimpan',
  594.                     'sisauang' => number_format($sisa, 0, ".", "."),
  595.                     'cetakfaktur' => site_url('kasir/cetakfaktur/') . $faktur
  596.                 ];
  597.             }
  598.             echo json_encode($msg);
  599.         }
  600.     }
  601.  
  602.     public function cetakfaktur()
  603.     {
  604.         $faktur = $this->uri->segment('3');
  605.  
  606.         $cekfaktur = $this->db->get_where('penjualan', ['jualfaktur' => $faktur]);
  607.  
  608.         if ($cekfaktur->num_rows() > 0) {
  609.             $row_penjualan = $cekfaktur->row_array();
  610.  
  611.             $query_toko = $this->db->get_where('nn_namatoko', ['idtoko' => 1]);
  612.             $row_toko = $query_toko->row_array();
  613.  
  614.             $query_detail = $this->db->query("SELECT penjualan_detail.*, satuan.`satnama`,produk.`namaproduk` FROM penjualan_detail JOIN satuan ON detjualsatid=satid JOIN produk ON produk.`kodebarcode`=detjualkodebarcode WHERE detjualfaktur='$faktur'");
  615.  
  616.             $ambil_datamember = $this->db->get_where('member', ['memberkode' => $row_penjualan['jualmemberkode']]);
  617.             if ($ambil_datamember->num_rows() > 0) {
  618.                 $row_member = $ambil_datamember->row_array();
  619.                 $kodemember = $row_member['memberkode'];
  620.                 $namamember = $row_member['membernama'];
  621.                 $tglsekarang = date('Y-m-d');
  622.                 $ambil_datasettingdiskon = $this->db->get('member_setting_diskon')->row_array();
  623.                 $diskonsetting = $ambil_datasettingdiskon['diskon'];
  624.  
  625.                 // Hitung sisa tabungan diskon member
  626.                 $query_tabungandiskon = $this->db->query("SELECT IFNULL(ROUND(SUM(jualtotalbersih * ($diskonsetting / 100)),0),0) AS totaldiskon FROM penjualan WHERE jualmemberkode='$kodemember' AND DATE_FORMAT(jualtgl,'%Y-%m-%d')<='$tglsekarang' AND (jualstatusbayar='T' OR jualstatusbayar='K')")->row_array();
  627.  
  628.                 $query_diskondigunakan = $this->db->query("SELECT IFNULL(SUM(jualtotalbersih),0) AS totaldigunakan FROM penjualan WHERE jualmemberkode='$kodemember' AND DATE_FORMAT(jualtgl,'%Y-%m-%d')<='$tglsekarang' AND jualstatusbayar='M'")->row_array();
  629.  
  630.                 $query_diskondiambil = $this->db->query("SELECT IFNULL(SUM(detambiljumlah),0) AS totaldiambil FROM pengambilan_diskon_detail JOIN pengambilan_diskon ON  detambilkode=ambilkode WHERE detambilmemberkode = '$kodemember' AND ambiltgl <= '$tglsekarang'")->row_array();
  631.  
  632.                 $totaldiskon = $query_tabungandiskon['totaldiskon'];
  633.                 $totaldigunakan = $query_diskondigunakan['totaldigunakan'];
  634.                 $totaldiambil = $query_diskondiambil['totaldiambil'];
  635.                 // end sisa tabungan diskon member
  636.  
  637.                 $totaldiskonmember = $totaldiskon - ($totaldigunakan + $totaldiambil);
  638.             }
  639.  
  640.             $data = [
  641.                 'namatoko' => $row_toko['nmtoko'],
  642.                 'alamattoko' => $row_toko['alamat'],
  643.                 'telptoko' => $row_toko['telp'],
  644.                 'hptoko' => $row_toko['hp'],
  645.                 'faktur' => $faktur,
  646.                 'totalkotor' => number_format($row_penjualan['jualtotalkotor'], 0, ",", "."),
  647.                 'totalbersih' => number_format($row_penjualan['jualtotalbersih'], 0, ",", "."),
  648.                 'disuang' => number_format($row_penjualan['jualdisuang'], 0, ",", "."),
  649.                 'dispersen' => $row_penjualan['jualdispersen'] . ' %',
  650.                 'namauser' => $this->session->userdata('namalengkapuser'),
  651.                 'tglfaktur' => $row_penjualan['jualtgl'],
  652.                 'jmluangbayar' => number_format($row_penjualan['jualjmluangbayar'], 0, ",", "."),
  653.                 'jmluangsisa' => number_format($row_penjualan['jualjmluangsisa'], 0, ",", "."),
  654.                 'detailpenjualan' => $query_detail,
  655.                 'member' => $row_penjualan['jualmemberkode'],
  656.                 'jualdispersen' => $row_penjualan['jualdispersen'],
  657.                 'jualdiskon' => $row_penjualan['jualdiskon'],
  658.                 'jualtotalbersih' => $row_penjualan['jualtotalbersih'],
  659.                 'jualjmluangsisa' => $row_penjualan['jualjmluangsisa'],
  660.                 'jualjmluangbayar' => $row_penjualan['jualjmluangbayar'],
  661.                 'kodemember' => $kodemember,
  662.                 'namamember' => $namamember,
  663.                 'totaldiskonmember' => $totaldiskonmember
  664.             ];
  665.  
  666.             $this->load->view('kasir/cetakfaktur', $data);
  667.         } else {
  668.             exit('Data tidak ditemukan...');
  669.         }
  670.     }
  671.  
  672.     public function cariproduk()
  673.     {
  674.         if ($this->input->is_ajax_request() == true) {
  675.             if ($this->input->is_ajax_request() == true) {
  676.                 $this->load->view('kasir/modalcariproduk');
  677.             }
  678.         }
  679.     }
  680.  
  681.     public function ambildataproduk()
  682.     {
  683.         if ($this->input->is_ajax_request() == true) {
  684.             $this->load->model('admin/produk/Modelcariproduk', 'produk');
  685.  
  686.             $list = $this->produk->get_datatables();
  687.             $data = array();
  688.             $no = $_POST['start'];
  689.             foreach ($list as $field) {
  690.                 $no++;
  691.                 $row = array();
  692.  
  693.                 $tombolpilih = "<button type=\"button\" class=\"btn btn-info btn-sm waves-effect waves-light btnpilih\" onclick=\"pilih('" . $field->kodebarcode . "','" . $field->namaproduk . "')\" title=\"Pilih Item\">
  694.                    <i class=\"fa fa-hand-point-up\"></i>
  695.                </button>";
  696.                 $row[] = $no;
  697.                 $row[] = $field->kodebarcode;
  698.                 $row[] = $field->namaproduk;
  699.                 // Ambil data supplier Pembelian Produk
  700.                 $query_pembelianproduk = $this->db->query("SELECT idpemasok,pemasok.`nama` as namapemasok FROM pembelian JOIN pemasok ON pemasok.`id`=idpemasok JOIN pembelian_detail ON nofaktur=detfaktur
  701.                JOIN produk ON kodebarcode=detkodebarcode WHERE detkodebarcode = '" . $field->kodebarcode . "' ");
  702.                 $datapemasok = '';
  703.                 foreach ($query_pembelianproduk->result_array() as $d) :
  704.                     $datapemasok .= $d['namapemasok'] . "<br>";
  705.                 endforeach;
  706.                 $row[] = $datapemasok;
  707.                 // End
  708.                 $row[] = $field->satnama;
  709.                 $row[] = number_format($field->harga_jual_eceran, 2, ".", ",");
  710.                 $row[] = number_format($field->stok_tersedia, 2, ".", ",");
  711.                 $row[] = $tombolpilih;
  712.                 $data[] = $row;
  713.             }
  714.  
  715.             $output = array(
  716.                 "draw" => $_POST['draw'],
  717.                 "recordsTotal" => $this->produk->count_all(),
  718.                 "recordsFiltered" => $this->produk->count_filtered(),
  719.                 "data" => $data,
  720.             );
  721.             //output dalam format JSON
  722.             echo json_encode($output);
  723.         }
  724.     }
  725.  
  726.     function gantisatuan()
  727.     {
  728.         if ($this->input->is_ajax_request() == true) {
  729.             $kode = $this->input->post('kode', true);
  730.             $id_tempjual = $this->input->post('id', true);
  731.             $jualfaktur = $this->input->post('jualfaktur', true);
  732.             $jualjml = $this->input->post('jml', true);
  733.  
  734.             $ambildata = $this->db->query("SELECT produk_harga.`idsat`,satuan.`satnama`,produk_harga.`id` as id FROM produk_harga JOIN satuan ON produk_harga.`idsat`=satuan.`satid` WHERE kodebarcode='$kode'");
  735.  
  736.             $ambildataproduk = $this->db->get_where('produk', ['kodebarcode' => $kode]);
  737.             $row = $ambildataproduk->row_array();
  738.  
  739.             if ($ambildata->num_rows() > 0) {
  740.                 $data = [
  741.                     'id_tempjual' => $id_tempjual,
  742.                     'satuanprodukharga' => $ambildata,
  743.                     'namaproduk' => $row['namaproduk'],
  744.                     'jualfaktur' => $jualfaktur,
  745.                     'jualjml' => $jualjml
  746.                 ];
  747.                 $msg = [
  748.                     'sukses' => [
  749.                         'tampilmodal' => $this->load->view('kasir/modalgantisatuan', $data, true)
  750.                     ]
  751.                 ];
  752.             } else {
  753.                 $msg = ['error' => 'Tidak ditemukan satuan yang lain nya pada produk ini.'];
  754.             }
  755.             echo json_encode($msg);
  756.         }
  757.     }
  758.  
  759.     function updategantisatuan()
  760.     {
  761.         if ($this->input->is_ajax_request() == true) {
  762.             $id_tempjual = $this->input->post('id_tempjual', true);
  763.             $satuan = $this->input->post('satuan', true);
  764.             $jualjml = $this->input->post('jualjml', true);
  765.  
  766.             $this->form_validation->set_rules('satuan', 'Satuan', 'trim|required', [
  767.                 'required' => '%s harus dipilih'
  768.             ]);
  769.  
  770.  
  771.             if ($this->form_validation->run() == TRUE) {
  772.                 $ambildata_produkharga = $this->db->get_where('produk_harga', ['id' => $satuan]);
  773.                 $row_produkharga = $ambildata_produkharga->row_array();
  774.  
  775.                 $idsat = $row_produkharga['idsat'];
  776.                 $hargajual = $row_produkharga['hargajual'];
  777.                 $hargamodal = $row_produkharga['hargamodal'];
  778.                 $jml_default = $row_produkharga['jml_default'];
  779.                 $kodebarcode = $row_produkharga['kodebarcode'];
  780.  
  781.                 //ambil data produk
  782.                 $query_produk = $this->db->get_where('produk', ['kodebarcode' => $kodebarcode]);
  783.                 $row_produk = $query_produk->row_array();
  784.                 $stok_tersedia = $row_produk['stok_tersedia'];
  785.  
  786.                 if (($jualjml * $jml_default) > $stok_tersedia) {
  787.                     $msg = [
  788.                         'error' => '<div class="alert alert-danger alert-dismissible fade show" role="alert">
  789.                                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  790.                                            <span aria-hidden="true">×</span>
  791.                                        </button> Maaf stok tidak mencukupi
  792.                                    </div>'
  793.                     ];
  794.                 } else {
  795.                     $subtotal = ($jualjml * $hargajual);
  796.  
  797.                     $data_update_tempjual = [
  798.                         'detjualsatid' => $idsat,
  799.                         'detjualsatqty' => $jml_default,
  800.                         'detjualharga' => $hargajual,
  801.                         'detjualhargabeli' => $hargamodal,
  802.                         'detjualsubtotal' => $subtotal
  803.                     ];
  804.                     $this->db->where('detjualid', $id_tempjual);
  805.                     $this->db->update('temp_jual', $data_update_tempjual);
  806.  
  807.                     $msg = [
  808.                         'sukses' => 'Berhasil diganti'
  809.                     ];
  810.                 }
  811.             } else {
  812.                 $msg = [
  813.                     'error' => '<div class="alert alert-danger alert-dismissible fade show" role="alert">
  814.                                    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  815.                                        <span aria-hidden="true">×</span>
  816.                                    </button>' . validation_errors() . '
  817.                                </div>'
  818.                 ];
  819.             }
  820.             echo json_encode($msg);
  821.         }
  822.     }
  823.  
  824.     public function ambildatatemp_terakhir()
  825.     {
  826.         if ($this->input->is_ajax_request() == true) {
  827.             $faktur = $this->input->post('faktur', true);
  828.             $username = $this->session->userdata('username');
  829.  
  830.             $query_cekdatatemp = $this->db->query("SELECT temp_jual.*,produk.`namaproduk`,satuan.`satnama` FROM temp_jual JOIN produk ON temp_jual.`detjualkodebarcode`=produk.`kodebarcode`
  831.            JOIN satuan ON detjualsatid=satuan.`satid` WHERE detjualfaktur = '$faktur' AND detjualuserinput='$username' ORDER BY detjualid DESC");
  832.  
  833.             if ($query_cekdatatemp->num_rows() > 0) {
  834.                 $row = $query_cekdatatemp->row_array();
  835.  
  836.                 $data = [
  837.                     'id' => $row['detjualid'],
  838.                     'kode' => $row['detjualkodebarcode'],
  839.                     'namaproduk' => $row['namaproduk'],
  840.                     'jml' => number_format($row['detjualjml'], 0),
  841.                     'satuan' => $row['satnama'],
  842.                     'hargajual' => number_format($row['detjualharga'], 2),
  843.                     'dispersen' => number_format($row['detjualdispersen'], 2),
  844.                     'disuang' => number_format($row['detjualdisuang'], 2, ".", ","),
  845.                 ];
  846.  
  847.                 $msg = ['sukses' => $data];
  848.             } else {
  849.                 $msg = [
  850.                     'error' => 'Data transaksi belum ada'
  851.                 ];
  852.             }
  853.             echo json_encode($msg);
  854.         }
  855.     }
  856.  
  857.     public function edititem_tempjual()
  858.     {
  859.         if ($this->input->is_ajax_request() == true) {
  860.             $id = $this->input->post('id', true);
  861.  
  862.             $query_cekdatatemp = $this->db->query("SELECT temp_jual.*,produk.`namaproduk`,satuan.`satnama` FROM temp_jual JOIN produk ON temp_jual.`detjualkodebarcode`=produk.`kodebarcode`
  863.            JOIN satuan ON detjualsatid=satuan.`satid` WHERE detjualid = '$id'");
  864.  
  865.             if ($query_cekdatatemp->num_rows() > 0) {
  866.                 $row = $query_cekdatatemp->row_array();
  867.  
  868.                 $data = [
  869.                     'id' => $row['detjualid'],
  870.                     'kode' => $row['detjualkodebarcode'],
  871.                     'namaproduk' => $row['namaproduk'],
  872.                     'jml' => $row['detjualjml'],
  873.                     'satuan' => $row['satnama'],
  874.                     'hargajual' => number_format($row['detjualharga'], 2),
  875.                     'dispersen' => number_format($row['detjualdispersen'], 2),
  876.                     'disuang' => number_format($row['detjualdisuang'], 2, ".", ","),
  877.                 ];
  878.  
  879.                 $msg = ['sukses' => $data];
  880.             } else {
  881.                 $msg = [
  882.                     'error' => 'Data transaksi belum ada'
  883.                 ];
  884.             }
  885.             echo json_encode($msg);
  886.         }
  887.     }
  888.  
  889.     public function updatejmlproduk()
  890.     {
  891.         if ($this->input->is_ajax_request() == true) {
  892.             $jml = $this->input->post('jml', true);
  893.             $id = $this->input->post('id', true);
  894.             $dispersen = $this->input->post('dispersen', true);
  895.             $disuang = $this->input->post('disuang', true);
  896.             $kode = $this->input->post('kode', true);
  897.  
  898.             // ambil data temp jual
  899.             $query_ambildatatemp = $this->db->get_where('temp_jual', ['detjualid' => $id]);
  900.             $row_temp_jual = $query_ambildatatemp->row_array();
  901.  
  902.             $detjualsatqty = $row_temp_jual['detjualsatqty'];
  903.             $detjualjml = $row_temp_jual['detjualjml'];
  904.             $detjualharga = $row_temp_jual['detjualharga'];
  905.             // end temp jual
  906.  
  907.             // ambil data produk
  908.             $query_ambildataproduk = $this->db->get_where('produk', ['kodebarcode' => $kode]);
  909.             $row_produk = $query_ambildataproduk->row_array();
  910.             $stoktersedia = $row_produk['stok_tersedia'];
  911.             $produkpaket = $row_produk['produkpaket'];
  912.             $idproduk = $row_produk['id'];
  913.             // end produk
  914.  
  915.             //cek stok produk
  916.             $kembalikan_stok = $stoktersedia + ($detjualjml * $detjualsatqty);
  917.             $kali_jmlbaru = $jml * $detjualsatqty;
  918.  
  919.             // Ambil data pengaturan
  920.             $datapengaturan = $this->db->get_where('pengaturan', ['id' => 1])->row_array();
  921.             // End
  922.  
  923.             if ($datapengaturan['stokminus'] == '1' && ($produkpaket == '0' || $produkpaket == '1')) {
  924.                 if ($kali_jmlbaru > $kembalikan_stok) {
  925.                     $msg = [
  926.                         'error' => 'Stok tidak mencukupi'
  927.                     ];
  928.                 } else {
  929.                     //update temp
  930.                     $hitung_subtotal = ($jml *  $detjualharga);
  931.                     $subtotal_bersih = $hitung_subtotal - ($hitung_subtotal * ($dispersen / 100)) - $disuang;
  932.                     $hitung_diskon = $hitung_subtotal * ($dispersen / 100) + $disuang;
  933.                     $dataupdate = [
  934.                         'detjualjml' => $jml,
  935.                         'detjualdispersen' => $dispersen,
  936.                         'detjualdisuang' => $disuang,
  937.                         'detjualsubtotalkotor' => $hitung_subtotal,
  938.                         'detjualsubtotal' => $subtotal_bersih,
  939.                         'detjualdiskon' => $hitung_diskon
  940.                     ];
  941.                     $this->db->where('detjualid', $id);
  942.                     $this->db->update('temp_jual', $dataupdate);
  943.  
  944.                     if ($produkpaket == 1) {
  945.                         $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $idproduk]);
  946.  
  947.                         foreach ($query_produkpaket->result_array() as $paket) :
  948.                             $paketkodebarcode = $paket['paketkodebarcode'];
  949.                             $paketjml = $paket['paketjml'];
  950.                             // Kurangi stok tersedia
  951.                             $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  952.                             $row_dataproduk = $query_dataproduk->row_array();
  953.                             $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  954.  
  955.                             $this->db->where('kodebarcode', $paketkodebarcode);
  956.                             $this->db->update('produk', [
  957.                                 'stok_tersedia' => $stok_dataproduk - $paketjml
  958.                             ]);
  959.                         // end kurang stok tersedia
  960.                         endforeach;
  961.  
  962.                         $msg = [
  963.                             'sukses' => 'Berhasil diupdate'
  964.                         ];
  965.                     } else {
  966.                         $msg = [
  967.                             'sukses' => 'Berhasil diupdate'
  968.                         ];
  969.                     }
  970.                 }
  971.             } else {
  972.                 //update temp
  973.                 $hitung_subtotal = ($jml *  $detjualharga);
  974.                 $subtotal_bersih = $hitung_subtotal - ($hitung_subtotal * ($dispersen / 100)) - $disuang;
  975.                 $hitung_diskon = $hitung_subtotal * ($dispersen / 100) + $disuang;
  976.                 $dataupdate = [
  977.                     'detjualjml' => $jml,
  978.                     'detjualdispersen' => $dispersen,
  979.                     'detjualdisuang' => $disuang,
  980.                     'detjualsubtotalkotor' => $hitung_subtotal,
  981.                     'detjualsubtotal' => $subtotal_bersih,
  982.                     'detjualdiskon' => $hitung_diskon
  983.                 ];
  984.                 $this->db->where('detjualid', $id);
  985.                 $this->db->update('temp_jual', $dataupdate);
  986.  
  987.                 if ($produkpaket == 1) {
  988.                     $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $idproduk]);
  989.  
  990.                     foreach ($query_produkpaket->result_array() as $paket) :
  991.                         $paketkodebarcode = $paket['paketkodebarcode'];
  992.                         $paketjml = $paket['paketjml'];
  993.                         // Kurangi stok tersedia
  994.                         $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  995.                         $row_dataproduk = $query_dataproduk->row_array();
  996.                         $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  997.  
  998.                         $this->db->where('kodebarcode', $paketkodebarcode);
  999.                         $this->db->update('produk', [
  1000.                             'stok_tersedia' => $stok_dataproduk - $paketjml
  1001.                         ]);
  1002.                     // end kurang stok tersedia
  1003.                     endforeach;
  1004.  
  1005.                     $msg = [
  1006.                         'sukses' => 'Berhasil diupdate'
  1007.                     ];
  1008.                 } else {
  1009.                     $msg = [
  1010.                         'sukses' => 'Berhasil diupdate'
  1011.                     ];
  1012.                 }
  1013.             }
  1014.  
  1015.  
  1016.  
  1017.             echo json_encode($msg);
  1018.         }
  1019.     }
  1020.     public function updatetambahjml()
  1021.     {
  1022.         if ($this->input->is_ajax_request() == true) {
  1023.             $id = $this->input->post('id', true);
  1024.             $kode = $this->input->post('kode', true);
  1025.  
  1026.             // ambil data temp jual
  1027.             $query_ambildatatemp = $this->db->get_where('temp_jual', ['detjualid' => $id]);
  1028.             $row_temp_jual = $query_ambildatatemp->row_array();
  1029.  
  1030.             $detjualsatqty = $row_temp_jual['detjualsatqty'];
  1031.             $detjualjml = $row_temp_jual['detjualjml'];
  1032.             $detjualharga = $row_temp_jual['detjualharga'];
  1033.             $detjualdispersen = $row_temp_jual['detjualdispersen'];
  1034.             $detjualdisuang = $row_temp_jual['detjualdisuang'];
  1035.             // end temp jual
  1036.  
  1037.             // ambil data produk
  1038.             $query_ambildataproduk = $this->db->get_where('produk', ['kodebarcode' => $kode]);
  1039.             $row_produk = $query_ambildataproduk->row_array();
  1040.             $stoktersedia = $row_produk['stok_tersedia'];
  1041.             $produkpaket = $row_produk['produkpaket'];
  1042.             $idproduk = $row_produk['id'];
  1043.             // end produk
  1044.  
  1045.             //cek stok produk
  1046.             $kembalikan_stok = $stoktersedia + ($detjualjml * $detjualsatqty);
  1047.             $kali_jmlbaru = ($detjualjml + 1) * $detjualsatqty;
  1048.  
  1049.             // Ambil data pengaturan
  1050.             $datapengaturan = $this->db->get_where('pengaturan', ['id' => 1])->row_array();
  1051.             // End
  1052.  
  1053.             if ($datapengaturan['stokminus'] == 1 && ($produkpaket == '0' || $produkpaket == '1')) {
  1054.                 if ($kali_jmlbaru > $kembalikan_stok) {
  1055.                     $msg = [
  1056.                         'error' => 'Stok tidak mencukupi'
  1057.                     ];
  1058.                 } else {
  1059.                     //update temp
  1060.                     $hitung_subtotal = ($detjualjml + 1) *  $detjualharga;
  1061.                     $subtotal_bersih = $hitung_subtotal - ($hitung_subtotal * ($detjualdispersen / 100)) - $detjualdisuang;
  1062.                     $hitung_diskon = $hitung_subtotal * ($detjualdispersen / 100) + $detjualdisuang;
  1063.                     $dataupdate = [
  1064.                         'detjualjml' => ($detjualjml + 1),
  1065.                         'detjualsubtotalkotor' => $hitung_subtotal,
  1066.                         'detjualsubtotal' => $subtotal_bersih,
  1067.                         'detjualdiskon' => $hitung_diskon
  1068.                     ];
  1069.                     $this->db->where('detjualid', $id);
  1070.                     $this->db->update('temp_jual', $dataupdate);
  1071.  
  1072.                     if ($produkpaket == 1) {
  1073.                         $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $idproduk]);
  1074.  
  1075.                         foreach ($query_produkpaket->result_array() as $paket) :
  1076.                             $paketkodebarcode = $paket['paketkodebarcode'];
  1077.                             $paketjml = $paket['paketjml'];
  1078.                             // Kurangi stok tersedia
  1079.                             $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  1080.                             $row_dataproduk = $query_dataproduk->row_array();
  1081.                             $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  1082.  
  1083.                             $this->db->where('kodebarcode', $paketkodebarcode);
  1084.                             $this->db->update('produk', [
  1085.                                 'stok_tersedia' => $stok_dataproduk - $paketjml
  1086.                             ]);
  1087.                         // end kurang stok tersedia
  1088.                         endforeach;
  1089.  
  1090.                         $msg = [
  1091.                             'sukses' => 'Berhasil diupdate'
  1092.                         ];
  1093.                     } else {
  1094.                         $msg = [
  1095.                             'sukses' => 'Berhasil diupdate'
  1096.                         ];
  1097.                     }
  1098.                 }
  1099.             } else {
  1100.                 //update temp
  1101.                 $hitung_subtotal = ($detjualjml + 1) *  $detjualharga;
  1102.                 $subtotal_bersih = $hitung_subtotal - ($hitung_subtotal * ($detjualdispersen / 100)) - $detjualdisuang;
  1103.                 $hitung_diskon = $hitung_subtotal * ($detjualdispersen / 100) + $detjualdisuang;
  1104.                 $dataupdate = [
  1105.                     'detjualjml' => ($detjualjml + 1),
  1106.                     'detjualsubtotalkotor' => $hitung_subtotal,
  1107.                     'detjualsubtotal' => $subtotal_bersih,
  1108.                     'detjualdiskon' => $hitung_diskon
  1109.                 ];
  1110.                 $this->db->where('detjualid', $id);
  1111.                 $this->db->update('temp_jual', $dataupdate);
  1112.  
  1113.                 if ($produkpaket == 1) {
  1114.                     $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $idproduk]);
  1115.  
  1116.                     foreach ($query_produkpaket->result_array() as $paket) :
  1117.                         $paketkodebarcode = $paket['paketkodebarcode'];
  1118.                         $paketjml = $paket['paketjml'];
  1119.                         // Kurangi stok tersedia
  1120.                         $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  1121.                         $row_dataproduk = $query_dataproduk->row_array();
  1122.                         $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  1123.  
  1124.                         $this->db->where('kodebarcode', $paketkodebarcode);
  1125.                         $this->db->update('produk', [
  1126.                             'stok_tersedia' => $stok_dataproduk - $paketjml
  1127.                         ]);
  1128.                     // end kurang stok tersedia
  1129.                     endforeach;
  1130.  
  1131.                     $msg = [
  1132.                         'sukses' => 'Berhasil diupdate'
  1133.                     ];
  1134.                 } else {
  1135.                     $msg = [
  1136.                         'sukses' => 'Berhasil diupdate'
  1137.                     ];
  1138.                 }
  1139.             }
  1140.  
  1141.  
  1142.  
  1143.             echo json_encode($msg);
  1144.         }
  1145.     }
  1146.  
  1147.     function updatekurangjml()
  1148.     {
  1149.         if ($this->input->is_ajax_request() == true) {
  1150.             $id = $this->input->post('id', true);
  1151.             $kode = $this->input->post('kode', true);
  1152.  
  1153.             // ambil data temp jual
  1154.             $query_ambildatatemp = $this->db->get_where('temp_jual', ['detjualid' => $id]);
  1155.             $row_temp_jual = $query_ambildatatemp->row_array();
  1156.  
  1157.             $detjualsatqty = $row_temp_jual['detjualsatqty'];
  1158.             $detjualjml = $row_temp_jual['detjualjml'];
  1159.             $detjualharga = $row_temp_jual['detjualharga'];
  1160.             $detjualdispersen = $row_temp_jual['detjualdispersen'];
  1161.             $detjualdisuang = $row_temp_jual['detjualdisuang'];
  1162.             // end temp jual
  1163.  
  1164.             // ambil data produk
  1165.             $query_ambildataproduk = $this->db->get_where('produk', ['kodebarcode' => $kode]);
  1166.             $row_produk = $query_ambildataproduk->row_array();
  1167.             $stoktersedia = $row_produk['stok_tersedia'];
  1168.             $produkpaket = $row_produk['produkpaket'];
  1169.             $idproduk = $row_produk['id'];
  1170.             // end produk
  1171.  
  1172.             //cek stok produk
  1173.             $kembalikan_stok = $stoktersedia + ($detjualjml * $detjualsatqty);
  1174.             $kali_jmlbaru = ($detjualjml - 1) * $detjualsatqty;
  1175.  
  1176.             // if ($kali_jmlbaru > $kembalikan_stok) {
  1177.             //     $msg = [
  1178.             //         'error' => 'Stok tidak mencukupi'
  1179.             //     ];
  1180.             // } else {
  1181.             //update temp
  1182.             $hitung_subtotal = ($detjualjml - 1) *  $detjualharga;
  1183.             $subtotal_bersih = $hitung_subtotal - ($hitung_subtotal * ($detjualdispersen / 100)) - $detjualdisuang;
  1184.             $hitung_diskon = $hitung_subtotal * ($detjualdispersen / 100) + $detjualdisuang;
  1185.             $dataupdate = [
  1186.                 'detjualjml' => ($detjualjml - 1),
  1187.                 'detjualsubtotalkotor' => $hitung_subtotal,
  1188.                 'detjualsubtotal' => $subtotal_bersih,
  1189.                 'detjualdiskon' => $hitung_diskon
  1190.             ];
  1191.             $this->db->where('detjualid', $id);
  1192.             $this->db->update('temp_jual', $dataupdate);
  1193.  
  1194.             if ($produkpaket == 1) {
  1195.                 $query_produkpaket = $this->db->get_where('produk_paket_item', ['paketidproduk' => $idproduk]);
  1196.  
  1197.                 foreach ($query_produkpaket->result_array() as $paket) :
  1198.                     $paketkodebarcode = $paket['paketkodebarcode'];
  1199.                     $paketjml = $paket['paketjml'];
  1200.                     // Kurangi stok tersedia
  1201.                     $query_dataproduk = $this->db->get_where('produk', ['kodebarcode' => $paketkodebarcode]);
  1202.                     $row_dataproduk = $query_dataproduk->row_array();
  1203.                     $stok_dataproduk = $row_dataproduk['stok_tersedia'];
  1204.  
  1205.                     $this->db->where('kodebarcode', $paketkodebarcode);
  1206.                     $this->db->update('produk', [
  1207.                         'stok_tersedia' => $stok_dataproduk - $paketjml
  1208.                     ]);
  1209.                 // end kurang stok tersedia
  1210.                 endforeach;
  1211.  
  1212.                 $msg = [
  1213.                     'sukses' => 'Berhasil diupdate'
  1214.                 ];
  1215.             } else {
  1216.                 $msg = [
  1217.                     'sukses' => 'Berhasil diupdate'
  1218.                 ];
  1219.             }
  1220.             // }
  1221.  
  1222.             echo json_encode($msg);
  1223.         }
  1224.     }
  1225.  
  1226.     public function holdingtransaksi()
  1227.     {
  1228.         if ($this->input->is_ajax_request() == true) {
  1229.             $faktur = $this->input->post('faktur', true);
  1230.             $kodemember = $this->input->post('kodemember', true);
  1231.             $napel = $this->input->post('napel', true);
  1232.             $total_subtotal = $this->input->post('total_subtotal', true);
  1233.             $username = $this->session->userdata('username');
  1234.  
  1235.             //cek dulu di temp jual
  1236.             $cek_tempjual = $this->db->get_where('temp_jual', ['detjualfaktur' => $faktur, 'detjualuserinput' => $username]);
  1237.             //end
  1238.             if ($cek_tempjual->num_rows() > 0) {
  1239.                 $simpan_datapenjualan = [
  1240.                     'jualfaktur' => $faktur,
  1241.                     'jualtgl' => date('Y-m-d H:i:s'),
  1242.                     'jualmemberkode' => $kodemember,
  1243.                     'jualstatusbayar' => 'H',
  1244.                     'jualtotalkotor' => $total_subtotal,
  1245.                     'jualtotalbersih' => $total_subtotal,
  1246.                     'jualstatuslunas' => 0,
  1247.                     'jualuserinput' => $username,
  1248.                     'jualnapel' => $napel
  1249.                 ];
  1250.                 $this->db->insert('penjualan', $simpan_datapenjualan);
  1251.  
  1252.                 //simpan penjualan detail
  1253.                 $this->db->query("INSERT INTO penjualan_detail(detjualfaktur,detjualtgl,detjualkodebarcode,detjualsatid,detjualsatqty,detjualjml,detjualharga,detjualhargabeli,detjualsubtotal,detjualuserinput,detjualdispersen,detjualdisuang,detjualsubtotalkotor,detjualdiskon) (SELECT detjualfaktur,detjualtgl,detjualkodebarcode,detjualsatid,detjualsatqty,detjualjml,detjualharga,detjualhargabeli,detjualsubtotal,detjualuserinput,detjualdispersen,detjualdisuang,detjualsubtotalkotor,detjualdiskon FROM temp_jual WHERE detjualfaktur='$faktur' AND detjualuserinput='$username')");
  1254.  
  1255.                 // Hapus temp jual
  1256.                 $this->db->delete('temp_jual', ['detjualfaktur' => $faktur, 'detjualuserinput' => $username]);
  1257.  
  1258.                 $msg = [
  1259.                     'sukses' => 'Transaksi berhasil ditahan',
  1260.                 ];
  1261.             } else {
  1262.                 $msg = [
  1263.                     'error' => 'Maaf item belum ada untuk faktur ini !'
  1264.                 ];
  1265.             }
  1266.             echo json_encode($msg);
  1267.         }
  1268.     }
  1269.  
  1270.     public function data_transaksi_ditahan()
  1271.     {
  1272.         if ($this->input->is_ajax_request() == true) {
  1273.             $username = $this->session->userdata('username');
  1274.  
  1275.             $this->db->order_by('jualtgl', 'desc');
  1276.             $query = $this->db->get_where('penjualan', ['jualuserinput' => $username, 'jualstatusbayar' => 'H']);
  1277.  
  1278.             $data = [
  1279.                 'tampildata' => $query
  1280.             ];
  1281.  
  1282.             $msg = [
  1283.                 'data' => $this->load->view('admin/penjualan/modaltransaksiditahan', $data, true)
  1284.             ];
  1285.  
  1286.             echo json_encode($msg);
  1287.         }
  1288.     }
  1289.  
  1290.     public function edittransaksiditahan()
  1291.     {
  1292.         $sha_faktur = $this->uri->segment('3');
  1293.         $cekdata = $this->db->get_where('penjualan', ['sha1(jualfaktur)' => $sha_faktur, 'jualstatusbayar' => 'H']);
  1294.  
  1295.         if ($cekdata->num_rows() > 0) {
  1296.             $r = $cekdata->row_array();
  1297.  
  1298.             // ambildata member
  1299.             $querymember = $this->db->get_where('member', ['memberkode' => $r['jualmemberkode']]);
  1300.             if ($querymember->num_rows() > 0) {
  1301.                 $rowMember = $querymember->row_array();
  1302.                 $membernama = $rowMember['membernama'];
  1303.             } else {
  1304.                 $membernama = '-';
  1305.             }
  1306.  
  1307.             $data = [
  1308.                 'jualfaktur' => $r['jualfaktur'],
  1309.                 'jualtgl' => date('d-m-Y', strtotime($r['jualtgl'])),
  1310.                 'jualmemberkode' => $r['jualmemberkode'],
  1311.                 'membernama' => $membernama,
  1312.                 'jualnapel' => $r['jualnapel']
  1313.             ];
  1314.  
  1315.             $view = [
  1316.                 'menu' => $this->load->view('template/menu', '', TRUE),
  1317.                 'judul' => '<i class="fa fa-tags"></i> Edit Transaksi',
  1318.                 'isi' => $this->load->view('admin/penjualan/edittransaksi', $data, true)
  1319.             ];
  1320.             $this->parser->parse('layoutkasir/main', $view);
  1321.         } else {
  1322.             redirect('kasir/input');
  1323.         }
  1324.     }
  1325.  
  1326.     function detaildatamember()
  1327.     {
  1328.         if ($this->input->is_ajax_request()) {
  1329.             $kodemember = $this->input->post('kodemember', true);
  1330.  
  1331.             $cek_datamember = $this->db->get_where('member', ['memberkode' => $kodemember]);
  1332.             if ($cek_datamember->num_rows() > 0) {
  1333.                 $row = $cek_datamember->row_array();
  1334.                 $cek_datadiskon = $this->db->get('member_setting_diskon')->row_array();
  1335.                 $msg = [
  1336.                     'sukses' => [
  1337.                         'namamember' => $row['membernama'],
  1338.                         'diskonmember' => $cek_datadiskon['diskon'],
  1339.                     ]
  1340.                 ];
  1341.             } else {
  1342.                 $msg = [
  1343.                     'error' => 'Data member tidak ditemukan...'
  1344.                 ];
  1345.             }
  1346.  
  1347.             echo json_encode($msg);
  1348.         }
  1349.     }
  1350.  
  1351.     public function pembayaranmember()
  1352.     {
  1353.         if ($this->input->is_ajax_request()) {
  1354.             $tglsekarang = date('Y-m-d');
  1355.             $faktur = $this->input->post('faktur', true);
  1356.             $kodemember = $this->input->post('kodemember', true);
  1357.             $pembulatan = $this->input->post('pembulatan', true);
  1358.             $totalkotor = $this->input->post('total_kotor', true);
  1359.             $diskonpersen = $this->input->post('dispersensemua', true);
  1360.             $diskonuang = $this->input->post('disuangsemua', true);
  1361.             $totalbersih = $this->input->post('total_bersih_semua', true);
  1362.  
  1363.             $ambil_datamembersettingdiskon = $this->db->get('member_setting_diskon')->row_array();
  1364.             $diskon_setting = $ambil_datamembersettingdiskon['diskon'];
  1365.  
  1366.             $query_totaldiskonmember = $this->db->query("SELECT IFNULL(ROUND(SUM(jualtotalbersih * ($diskon_setting / 100)),0),0) AS totaldiskonterkumpul FROM penjualan WHERE jualmemberkode = '$kodemember' AND DATE_FORMAT(jualtgl,'%Y-%m-%d') <= '$tglsekarang' AND (jualstatusbayar = 'T' OR jualstatusbayar = 'K')")->row_array();
  1367.  
  1368.             $totaldiskon_terkumpul = $query_totaldiskonmember['totaldiskonterkumpul'];
  1369.  
  1370.             $query_totaldiskondigunakan = $this->db->query("SELECT IFNULL(SUM(jualtotalbersih),0) AS totaldiskondigunakan FROM penjualan WHERE jualmemberkode = '$kodemember' AND DATE_FORMAT(jualtgl,'%Y-%m-%d') <= '$tglsekarang' AND jualstatusbayar = 'M'")->row_array();
  1371.  
  1372.             $totaldiskon_digunakan = $query_totaldiskondigunakan['totaldiskondigunakan'];
  1373.  
  1374.             $query_diskondiambil = $this->db->query("SELECT IFNULL(SUM(detambiljumlah),0) AS totaldiambil FROM pengambilan_diskon_detail JOIN pengambilan_diskon ON  detambilkode=ambilkode WHERE detambilmemberkode = '$kodemember' AND ambiltgl <= '$tglsekarang'")->row_array();
  1375.  
  1376.             $sisa_diskonmember = $totaldiskon_terkumpul - $totaldiskon_digunakan - $query_diskondiambil['totaldiambil'];
  1377.  
  1378.             if ($pembulatan > $sisa_diskonmember) {
  1379.                 $msg = [
  1380.                     'error' => 'Maaf tabungan point anda tidak mencukupi !'
  1381.                 ];
  1382.             } else {
  1383.                 $username = $this->session->userdata('username');
  1384.                 $hitung_diskon = $totalkotor * ($diskonpersen / 100) + $diskonuang;
  1385.                 //simpan penjualan
  1386.                 $simpan_penjualan = [
  1387.                     'jualfaktur' => $faktur,
  1388.                     'jualtgl' => date('Y-m-d H:i:s'),
  1389.                     'jualmemberkode' => $kodemember,
  1390.                     'jualstatusbayar' => 'M',
  1391.                     'jualtotalkotor' => $totalkotor,
  1392.                     'jualdispersen' => $diskonpersen,
  1393.                     'jualdisuang' => $diskonuang,
  1394.                     'jualtotalbersih' => $totalbersih,
  1395.                     'jualstatuslunas' => '1',
  1396.                     'jualuserinput' => $username,
  1397.                     'jualdiskon' => $hitung_diskon,
  1398.                     'jualpembulatan' => $pembulatan
  1399.                 ];
  1400.                 $this->db->insert('penjualan', $simpan_penjualan);
  1401.  
  1402.                 // Update neraca 2-130 simpanan tabungan member
  1403.                 $this->neraca->debit_simpanantabunganmember($faktur, $totalbersih);
  1404.                 // End
  1405.  
  1406.                 //simpan penjualan detail
  1407.                 $this->db->query("INSERT INTO penjualan_detail(detjualfaktur,detjualtgl,detjualkodebarcode,detjualsatid,detjualsatqty,detjualjml,detjualharga,detjualhargabeli,detjualsubtotal,detjualuserinput,detjualdispersen,detjualdisuang,detjualsubtotalkotor,detjualdiskon) (SELECT detjualfaktur,detjualtgl,detjualkodebarcode,detjualsatid,detjualsatqty,detjualjml,detjualharga,detjualhargabeli,detjualsubtotal,detjualuserinput,detjualdispersen,detjualdisuang,detjualsubtotalkotor,detjualdiskon FROM temp_jual WHERE detjualfaktur='$faktur' AND detjualuserinput='$username')");
  1408.  
  1409.                 // Hapus temp jual
  1410.                 $this->db->delete('temp_jual', ['detjualfaktur' => $faktur, 'detjualuserinput' => $username]);
  1411.  
  1412.  
  1413.                 // Neraca 1-160 Persediaan Barang Dagang
  1414.                 $ambildata_penjualan_detail = $this->db->query("SELECT SUM(detjualjml*detjualhargabeli) AS total_harga,detjualtgl FROM penjualan_detail WHERE detjualfaktur ='$faktur'");
  1415.                 $row_penjualan_detail = $ambildata_penjualan_detail->row_array();
  1416.  
  1417.                 $this->neraca->debit_persediaan_dagang_penjualan($faktur, $row_penjualan_detail['detjualtgl'], $row_penjualan_detail['total_harga']);
  1418.  
  1419.                 $msg = ['sukses' => 'Pembayaran menggunakan tabungan point berhasil dilakukan.'];
  1420.             }
  1421.  
  1422.             echo json_encode($msg);
  1423.         }
  1424.     }
  1425. }
RAW Paste Data