public async Task <ActionResult> Create([Bind(Include = "Branches_Id,LessonPackages_Id,Products_Id,Vouchers_Id,Customers_Id,Notes")] SaleInvoicesViewModels saleInvoicesViewModels, int Amount, string Items) { if (saleInvoicesViewModels.Customers_Id == Guid.Empty) { ModelState.AddModelError("Customers_Id", "The field Customer is required."); } if (Items == "[]" || Amount == 0) { ModelState.AddModelError("Items", "The field Items is required."); } var user_login = await db.User.Where(x => x.UserName == User.Identity.Name).FirstOrDefaultAsync(); if (ModelState.IsValid) { string lastHex_string = db.SaleInvoices.AsNoTracking().Max(x => x.No); int lastHex_int = int.Parse( string.IsNullOrEmpty(lastHex_string) ? 0.ToString("X5") : lastHex_string, System.Globalization.NumberStyles.HexNumber); //var login_session = Session["Login"] as LoginViewModel; SaleInvoicesModels saleInvoicesModels = new SaleInvoicesModels { Id = Guid.NewGuid(), Branches_Id = user_login.Branches_Id, //login_session.Branches_Id; No = (lastHex_int + 1).ToString("X5"), Timestamp = DateTime.UtcNow, Customer_UserAccounts_Id = saleInvoicesViewModels.Customers_Id.ToString(), Notes = saleInvoicesViewModels.Notes, Amount = Amount, Due = Amount, Cancelled = false, IsChecked = false }; db.SaleInvoices.Add(saleInvoicesModels); byte row = 1; List <SaleInvoiceItemDetails> details = JsonConvert.DeserializeObject <List <SaleInvoiceItemDetails> >(Items); foreach (var item in details) { Guid?saleinvoiceitems_vouchers = null; if (!string.IsNullOrEmpty(item.voucher_id)) { SaleInvoiceItems_VouchersModels saleInvoiceItems_VouchersModels = new SaleInvoiceItems_VouchersModels { Id = Guid.NewGuid(), Voucher_Ids = item.voucher_id, Amount = item.voucher }; db.SaleInvoiceItems_Vouchers.Add(saleInvoiceItems_VouchersModels); saleinvoiceitems_vouchers = saleInvoiceItems_VouchersModels.Id; } SaleInvoiceItemsModels sii = new SaleInvoiceItemsModels { Id = Guid.NewGuid(), RowNo = row, SaleInvoices_Id = saleInvoicesModels.Id, Description = item.desc, Qty = item.qty, Price = item.price, DiscountAmount = item.disc, SaleInvoiceItems_Vouchers_Id = saleinvoiceitems_vouchers, //item.voucher_id, Notes = item.note, Products_Id = item.inventory_id, Services_Id = item.service_id, LessonPackages_Id = item.lesson_id, SessionHours = item.qty * item.hours, //item.lesson_id.HasValue ? db.LessonPackages.Where(x => x.Id == item.lesson_id).FirstOrDefault().SessionHours : 0, SessionHours_Remaining = item.qty * item.hours, //item.lesson_id.HasValue ? db.LessonPackages.Where(x => x.Id == item.lesson_id).FirstOrDefault().SessionHours : 0, TravelCost = item.travel, TutorTravelCost = item.tutor }; db.SaleInvoiceItems.Add(sii); if (item.inventory_id.HasValue) { SyncSaleInvoice_Inventory(user_login.Branches_Id, item.inventory_id.Value, item.qty, sii.Id); Products_QtyModels products_QtyModels = await db.Products_Qty.Where(x => x.Branches_Id == user_login.Branches_Id && x.Products_Id == item.inventory_id.Value).FirstOrDefaultAsync(); products_QtyModels.Qty -= item.qty; db.Entry(products_QtyModels).State = EntityState.Modified; } row++; } await db.SaveChangesAsync(); return(RedirectToAction("Index")); } Permission p = new Permission(); #region List Voucher var vouchers = db.Vouchers.Where(x => x.Active == true).OrderBy(x => x.Code).ToList(); List <object> voucher_list = new List <object>(); foreach (var item in vouchers) { voucher_list.Add(new { item.Id, Name = (string.IsNullOrEmpty(item.Notes)) ? "[" + item.Code + ": " + string.Format("{0:N2}", item.Amount) + "] " + item.Description : "[" + item.Code + ": " + string.Format("{0:N2}", item.Amount) + "] " + item.Description + " (" + item.Notes + ")" }); } #endregion #region List Customer var customers = (from u in db.User where u.Active == true //join ur in db.UserRole on u.Id equals ur.UserId //join r in db.Role on ur.RoleId equals r.Id //where r.Name == "Student" orderby u.Firstname select new { u }).ToList(); List <object> customer_list = new List <object>(); foreach (var item in customers) { customer_list.Add(new { Id = item.u.Id, Name = item.u.Firstname + " " + item.u.Middlename + " " + item.u.Lastname }); } #endregion #region List Lesson var lessons = (from lp in db.LessonPackages join l in db.Languages on lp.Languages_Id equals l.Id join lt in db.LessonTypes on lp.LessonTypes_Id equals lt.Id where lp.Active == true orderby lp.Name select new LessonPackagesViewModels { Id = lp.Id, Name = lp.Name, Languages = l.Name, LessonTypes = lt.Name, SessionHours = lp.SessionHours, ExpirationDay = lp.ExpirationDay, Price = lp.Price, Active = lp.Active }).ToList(); List <object> lesson_list = new List <object>(); foreach (var item in lessons) { lesson_list.Add(new { item.Id, Name = "[" + item.LessonTypes + ", " + item.Languages + "] " + item.Name + " (" + item.SessionHours + " hrs, " + string.Format("{0:N0}", item.Price) + ")" }); } #endregion #region List Product var list_product = (from pr in db.Products join pq in db.Products_Qty on pr.Id equals pq.Products_Id where pq.Branches_Id == user_login.Branches_Id orderby pr.Description select new { pr, pq }).ToList(); List <object> products = new List <object>(); foreach (var product in list_product) { products.Add(new { product.pr.Id, Name = product.pr.Description }); } #endregion #region List Role string role_id_allowed = db.Settings.Find(SettingsValue.GUID_UserSetRoleAllowed).Value_Guid.Value.ToString(); List <SelectListItem> role_list = new List <SelectListItem>(); bool setRole = p.IsGranted(User.Identity.Name, "user_setroles"); if (setRole) { foreach (var role in db.Role.OrderBy(x => x.Name)) { role_list.Add(new SelectListItem() { Value = role.Name, Text = role.Name }); } } else { foreach (var role in db.Role.Where(x => x.Id == role_id_allowed).OrderBy(x => x.Name)) { role_list.Add(new SelectListItem() { Value = role.Name, Text = role.Name }); } } #endregion ViewBag.listBranch = new SelectList(db.Branches.Where(x => x.Active == true).OrderBy(x => x.Name).ToList(), "Id", "Name"); ViewBag.listVoucher = new SelectList(voucher_list, "Id", "Name"); ViewBag.listCustomer = new SelectList(customer_list, "Id", "Name"); ViewBag.listLesson = new SelectList(lesson_list, "Id", "Name"); ViewBag.listProduct = new SelectList(products, "Id", "Name"); ViewBag.listService = new SelectList(db.Services.Where(x => x.Active == true).OrderBy(x => x.Description).ToList(), "Id", "Description"); ViewBag.listRole = role_list; ViewBag.RoleValueDefault = db.Role.Find(role_id_allowed).Name; ViewBag.listLanguage = new SelectList(db.Languages.Where(x => x.Active == true).OrderBy(x => x.Name).ToList(), "Id", "Name"); ViewBag.listPromo = new SelectList(db.PromotionEvents.OrderBy(x => x.Name).ToList(), "Id", "Name"); ViewBag.DOB = DateTime.UtcNow.Date; return(View(saleInvoicesViewModels)); }
public JsonResult SavePayments(Guid branch_id, int cash_amount, int consignment_amount, Guid?consignment_id, int bank_amount, string bank_name, string owner_name, string bank_number, string reff_no, string notes, string bank_type, string invoices_id) { string lastHex_string = db.Payments.AsNoTracking().Max(x => x.No); int lastHex_int = int.Parse( string.IsNullOrEmpty(lastHex_string) ? 0.ToString("X5") : lastHex_string, System.Globalization.NumberStyles.HexNumber); PaymentsModels paymentsModels = new PaymentsModels { Id = Guid.NewGuid(), No = (lastHex_int + 1).ToString("X5"), Timestamp = DateTime.UtcNow, CashAmount = cash_amount, DebitAmount = bank_amount, DebitBank = (bank_amount == 0) ? "" : bank_name, DebitOwnerName = (bank_amount == 0) ? "" : owner_name, DebitNumber = (bank_amount == 0) ? "" : bank_number, DebitRefNo = (bank_amount == 0) ? "" : reff_no, Consignments_Id = (consignment_amount == 0) ? null : consignment_id, ConsignmentAmount = consignment_amount, Notes = notes, Cancelled = false, Confirmed = false, IsTransfer = (bank_type == "Transfer") ? true : false }; string status; Guid payment_id; DateTime dateStart = DateTime.UtcNow.AddSeconds(-10); //range time = 10 seconds DateTime dateEnd = DateTime.UtcNow; var paymentCheck = db.Payments.Where(x => x.Timestamp >= dateStart && x.Timestamp <= dateEnd && x.CashAmount == paymentsModels.CashAmount && x.DebitAmount == paymentsModels.DebitAmount && x.DebitBank == paymentsModels.DebitBank && x.DebitOwnerName == paymentsModels.DebitOwnerName && x.DebitNumber == paymentsModels.DebitNumber && x.DebitRefNo == paymentsModels.DebitRefNo && x.Consignments_Id == paymentsModels.Consignments_Id && x.ConsignmentAmount == paymentsModels.ConsignmentAmount && x.Notes == paymentsModels.Notes && x.Cancelled == paymentsModels.Cancelled && x.Confirmed == paymentsModels.Confirmed && x.IsTransfer == paymentsModels.IsTransfer ).FirstOrDefault(); if (paymentCheck != null) { status = "300"; payment_id = paymentCheck.Id; } //duplicate else { status = "200"; payment_id = paymentsModels.Id; db.Payments.Add(paymentsModels); int total_paid = cash_amount + bank_amount + consignment_amount; string[] ids = invoices_id.Split(','); for (int i = ids.Length - 1; i >= 0; i--) //foreach (string id in ids) { if (total_paid > 0) { string id_saleinvoice = ids[i]; SaleInvoicesModels saleInvoicesModels = db.SaleInvoices.Where(x => x.Id.ToString() == id_saleinvoice).FirstOrDefault(); int due_inv = saleInvoicesModels.Due; if (total_paid >= due_inv) { saleInvoicesModels.Due = 0; total_paid -= due_inv; } else { saleInvoicesModels.Due -= total_paid; total_paid = 0; } db.Entry(saleInvoicesModels).State = EntityState.Modified; PaymentItemsModels paymentItemsModels = new PaymentItemsModels { Id = Guid.NewGuid(), Payments_Id = paymentsModels.Id, ReferenceId = saleInvoicesModels.Id, Amount = (due_inv > saleInvoicesModels.Due) ? due_inv - saleInvoicesModels.Due : saleInvoicesModels.Due - due_inv, DueBefore = due_inv, DueAfter = saleInvoicesModels.Due }; db.PaymentItems.Add(paymentItemsModels); } } if (cash_amount > 0) { string lastHex_string_pcr = db.PettyCashRecords.AsNoTracking().Max(x => x.No); int lastHex_int_pcr = int.Parse( string.IsNullOrEmpty(lastHex_string_pcr) ? 0.ToString("X5") : lastHex_string_pcr, System.Globalization.NumberStyles.HexNumber); PettyCashRecordsModels pettyCashRecordsModels = new PettyCashRecordsModels { Id = Guid.NewGuid(), Branches_Id = branch_id, RefId = paymentsModels.Id, No = (lastHex_int_pcr + 1).ToString("X5"), Timestamp = DateTime.UtcNow, PettyCashRecordsCategories_Id = db.Settings.Where(x => x.Id == SettingsValue.GUID_AutoEntryForCashPayments).FirstOrDefault().Value_Guid.Value, //db.PettyCashRecordsCategories.Where(x => x.Name == "Penjualan Tunai").FirstOrDefault().Id, Notes = "Cash Payment [" + paymentsModels.No + "]", Amount = cash_amount, IsChecked = false, UserAccounts_Id = db.User.Where(x => x.UserName == User.Identity.Name).FirstOrDefault().Id }; db.PettyCashRecords.Add(pettyCashRecordsModels); } db.SaveChanges(); } return(Json(new { status, payment_id }, JsonRequestBehavior.AllowGet)); }