private decimal HitungTotalBayar(ProsesSatuanViewModel model)
        {
            var total = 0;

            foreach (var detail in model.Detail)
            {
                var harga = _db.Barangs.Where(x => x.Kode == detail.KodeBarang).SingleOrDefault().Harga;

                total += detail.Jumlah * harga;
            }

            return(total);
        }
        public ActionResult CetakTransaksi(string kodeTransaksi)
        {
            var transaksiSatuan = _db.TransaksiSatuans.Where(x => x.Kode == kodeTransaksi).SingleOrDefault();

            var model = new ProsesSatuanViewModel
            {
                Kode      = transaksiSatuan.Kode,
                Pelanggan = new PelangganViewModel
                {
                    NoKtp  = transaksiSatuan.PelangganFK.NoKtp,
                    Nama   = transaksiSatuan.PelangganFK.Nama,
                    Alamat = transaksiSatuan.PelangganFK.Alamat,
                    Hp     = transaksiSatuan.PelangganFK.Hp
                },
                UangMuka       = transaksiSatuan.UangMuka,
                TotalBayar     = transaksiSatuan.TotalBayar,
                NamaCounter    = transaksiSatuan.CounterFK.Nama,
                Staff          = transaksiSatuan.StaffFK.UserName,
                TanggalMasuk   = transaksiSatuan.TanggalMasuk,
                TanggalSelesai = transaksiSatuan.TanggalKeluar.GetValueOrDefault()
            };

            var details = new List <ProsesSatuanDetailViewModel>();

            foreach (var detil in transaksiSatuan.TransaksiSatuanDetilFK)
            {
                var detailModel = new ProsesSatuanDetailViewModel
                {
                    Jumlah     = detil.Jumlah,
                    KodeBarang = detil.KodeBarang,
                    Barang     = new BarangViewModel
                    {
                        Nama         = detil.BarangFK.Nama,
                        TipeCuciNama = detil.BarangFK.TipeCuciFK.Tipe,
                        Harga        = detil.BarangFK.Harga
                    }
                };

                details.Add(detailModel);
            }

            model.Detail = details;

            return(View(model));
        }
        public ActionResult SimpanTransaksiSatuan(string[][] daftarCucian)
        {
            var daftarDetail = new List <ProsesSatuanDetailViewModel>();

            for (var i = 0; i < daftarCucian.Length; i++)
            {
                var detail = new ProsesSatuanDetailViewModel
                {
                    KodeBarang = int.Parse(daftarCucian[i][0]),
                    Jumlah     = int.Parse(daftarCucian[i][1])
                };

                daftarDetail.Add(detail);
            }

            var prosesSatuan = new ProsesSatuanViewModel
            {
                Pelanggan = new PelangganViewModel
                {
                    Nama   = daftarCucian[0][2],
                    Hp     = daftarCucian[0][3],
                    NoKtp  = daftarCucian[0][4],
                    Alamat = daftarCucian[0][5]
                },
                UangMuka = int.Parse(daftarCucian[0][6]),
                Detail   = daftarDetail
            };

            var pelangganAda = _db.Pelanggans.Where(x => x.NoKtp == prosesSatuan.Pelanggan.NoKtp).Any();

            if (!pelangganAda)
            {
                SimpanDataPelanggan(prosesSatuan.Pelanggan);
            }

            var kodeTransaksiSatuan = SimpanTransaksiSatuan(prosesSatuan);

            return(Json(kodeTransaksiSatuan, JsonRequestBehavior.AllowGet));
        }
        private string SimpanTransaksiSatuan(ProsesSatuanViewModel model)
        {
            var pelanggan = _db.Pelanggans.Where(x => x.NoKtp == model.Pelanggan.NoKtp).SingleOrDefault();

            if (pelanggan == null)
            {
                return(string.Empty);
            }

            var userId = User.Identity.GetUserId();

            var staff = _db.Staffs.Where(x => x.Kode == userId).SingleOrDefault();

            if (staff == null)
            {
                return(string.Empty);
            }

            var counter = _db.StaffCounters.Where(x => x.KodeStaff == userId).SingleOrDefault();

            if (counter == null)
            {
                return(string.Empty);
            }

            var kodeTransaksi = string.Format("TS-{0}-{1}", counter.KodeCounter, DateTime.Now.ToString("yyMMddHHmmss"));

            var totalBayar = HitungTotalBayar(model);

            var transaksiSatuan = new TransaksiSatuan
            {
                Kode             = kodeTransaksi,
                KodeCounter      = counter.KodeCounter,
                KodeStaff        = userId,
                TanggalMasuk     = DateTime.Now,
                TanggalKeluar    = DateTime.Now.AddDays(2),
                TotalBayar       = totalBayar,
                TotalBayarRevisi = totalBayar,
                KodePelanggan    = pelanggan.Kode,
                UangMuka         = model.UangMuka,
                StatusTransaksi  = "Diterima"
            };

            transaksiSatuan.TransaksiSatuanDetilFK = new List <TransaksiSatuanDetil>();

            foreach (var detail in model.Detail)
            {
                var detil = new TransaksiSatuanDetil
                {
                    KodeTransaksiSatuan = kodeTransaksi,
                    KodeBarang          = detail.KodeBarang,
                    Jumlah   = detail.Jumlah,
                    Pengecek = userId,
                    Revisi   = 0
                };

                transaksiSatuan.TransaksiSatuanDetilFK.Add(detil);
            }

            try
            {
                _db.TransaksiSatuans.Add(transaksiSatuan);
                _db.SaveChanges();
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                      eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                          ve.PropertyName, ve.ErrorMessage);
                    }
                }
            }


            return(kodeTransaksi);
        }