public ActionResult Edit(purchaseReceive purchasereceive) { if (acm.cekSession() == false) return RedirectToAction("Logout", "Account"); lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin; if (acm.cekValidation(Url.Action().ToString()) == false && lvm.isAdmin == false) return RedirectToAction("NotAuthorized", "Account", new { menu = Url.Action().ToString() }); if (ModelState.IsValid) { var countChk = 0; bool isProposed = false; for (int i = 0; i < Request.Form.Count; i++) { if (Request.Form.AllKeys.ToList()[i].Contains("txtProductID_")) countChk++; else if (Request.Form.AllKeys.ToList()[i].Contains("hdnTypeSubmit")) if (Request.Form["hdnTypeSubmit"].ToString() == "requested") isProposed = true; } try { using (TransactionScope ts = new TransactionScope()) { lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin; purchasereceive.modifiedUser = lvm.userID; purchasereceive.modifiedDate = DateTime.Now; purchasereceive.proposedStatus = isProposed; db.Entry(purchasereceive).State = EntityState.Modified; List<string> listProductId = new List<string>(); #region insertDetail bool runFirst = true; for (int i = 1; i <= countChk; i++) { if (runFirst == true) { db.purchaseReceiveDetails.RemoveRange(db.purchaseReceiveDetails.Where(x => x.receiveNo == purchasereceive.receiveNo)); db.purchaseReturnDetails.RemoveRange(db.purchaseReturnDetails.Where(x => x.receiveNo == purchasereceive.receiveNo)); runFirst = false; } var colVal = Request.Form["txtProductID_" + i]; if (colVal == "") break; int t_productID = int.Parse(Request.Form["txtProductID_" + i].ToString()); int t_qtyReceive = Request.Form["txtQtyReceive_" + i].ToString() != "" ? Convert.ToInt32(Request.Form["txtQtyReceive_" + i].ToString().Replace('.', ',')) : 0; int t_qtyReturn = Request.Form["txtQtyReturn_" + i].ToString() != "" ? Convert.ToInt32(Request.Form["txtQtyReturn_" + i].ToString().Replace('.', ',')) : 0; listProductId.Add(t_productID.ToString()); if (t_qtyReceive > 0) { var editorx = new purchaseReceive.purchaseReceiveDetail() { receiveNo = purchasereceive.receiveNo, productId = t_productID, qty = t_qtyReceive }; db.purchaseReceiveDetails.Add(editorx); } if (t_qtyReturn > 0) { var editory = new purchaseReceive.purchaseReturnDetail() { receiveNo = purchasereceive.receiveNo, productId = t_productID, qty = t_qtyReturn }; db.purchaseReturnDetails.Add(editory); } } #endregion if (isProposed == true) { #region createInvoice PurchaseInvoiceController pIv = new PurchaseInvoiceController(); string prefixInvoice = pIv.prefix; string generateIDInvoice = prefixInvoice + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString("d2"); string generateIDInvoiceSequence = ""; var invIDCreated = db.purchaseInvoices.Where(x => x.purchaseInvoiceNo.Contains(generateIDInvoice)).OrderByDescending(x => x.createdDate).Select(x => x.purchaseInvoiceNo).ToList(); if (invIDCreated.Count == 0) { generateIDInvoiceSequence = generateIDInvoice + "0001"; } else { generateIDInvoiceSequence = generateIDInvoice + (Convert.ToInt32(invIDCreated[0].Substring((invIDCreated[0].Length - 4))) + 1).ToString().PadLeft(4, '0'); } var headerPO = db.purchaseOrderHeaders.Where(x => x.poId == purchasereceive.poId).ToList(); var topPOMultiple = db.purchaseOrderTOPs.Where(x => x.poId == purchasereceive.poId).ToList(); purchaseInvoice purchaseinvoice = new purchaseInvoice(); purchaseinvoice.invoiceDate = purchasereceive.proposedDate; purchaseinvoice.receiveNo = purchasereceive.receiveNo; purchaseinvoice.createdUser = purchasereceive.proposedBy; purchaseinvoice.createdDate = purchasereceive.proposedDate; if (headerPO[0].topType == "Single") { purchaseinvoice.purchaseInvoiceNo = generateIDInvoiceSequence; purchaseinvoice.dueDate = purchasereceive.proposedDate.AddDays(headerPO[0].topAmount); db.purchaseInvoices.Add(purchaseinvoice); } else if (headerPO[0].topType == "Multiple") { for (int a = 0; a < topPOMultiple.Count; a++) { purchaseinvoice.purchaseInvoiceNo = generateIDInvoiceSequence; purchaseinvoice.dueDate = topPOMultiple[a].buyDate; int prodId = int.Parse(listProductId[0]); var poInfo = db.purchaseOrderDetails.Where(x => x.poId == purchasereceive.poId && x.productID == prodId).ToList(); decimal total = ((poInfo[0].qty * poInfo[0].price) - ((poInfo[0].qty * poInfo[0].price) / 100)); purchaseinvoice.total = total; db.purchaseInvoices.Add(purchaseinvoice); generateIDInvoiceSequence = generateIDInvoice + (Convert.ToInt32(generateIDInvoiceSequence.Substring((generateIDInvoiceSequence.Length - 4))) + 1).ToString().PadLeft(4, '0'); } db.purchaseInvoices.Add(purchaseinvoice); } #endregion } db.SaveChanges(); ts.Complete(); } return RedirectToAction("Index"); } catch (Exception exc) { string a = exc.Message; } } return View(purchasereceive); }
public ActionResult Create(purchaseReceive purchasereceive) { if (acm.cekSession() == false) return RedirectToAction("Logout", "Account"); lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin; if (acm.cekValidation(Url.Action().ToString()) == false && lvm.isAdmin == false) return RedirectToAction("NotAuthorized", "Account", new { menu = Url.Action().ToString() }); var z = db.purchaseOrderDetails.Where(x => x.poId == purchasereceive.poId) .Join(db.purchaseOrderHeaders, a => a.poId, b => b.poId, (a, b) => new { a, b }) .Join(db.purchaseRequestDetails, c => c.b.prId, d => d.prId, (c, d) => new { c, d }) .Where(e => e.c.a.productID == e.d.productId) .Select(y => new { y.c.a.poId, y.c.a.productID, y.d.description, y.c.a.qty, y.d.unit }).ToList(); var model = new purchaseReceive(); for (int i = 0; i < z.Count; i++) { var editor = new purchaseReceive.poReceive() { productId = z[i].productID, productDesc = z[i].description, qtyOrder = z[i].qty, unit = z[i].unit }; model.detailPoReceive.Add(editor); } ViewData["dataDetail"] = model.detailPoReceive.ToList(); if (ModelState.IsValid) { var countChk = 0; bool isProposed = false; for (int i = 0; i < Request.Form.Count; i++) { if (Request.Form.AllKeys.ToList()[i].Contains("txtProductID_")) countChk++; else if (Request.Form.AllKeys.ToList()[i].Contains("hdnTypeSubmit")) if (Request.Form["hdnTypeSubmit"].ToString() == "requested") isProposed = true; } try { using (TransactionScope ts = new TransactionScope()) { string generateID = prefix + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString("d2"); var prIDCreated = db.purchaseReceives.Where(x => x.receiveNo.Contains(generateID)).OrderByDescending(x => x.createdDate).Select(x => x.poId).ToList(); if (prIDCreated.Count == 0) { generateID = generateID + "0001"; } else { generateID = generateID + (Convert.ToInt32(prIDCreated[0].Substring((prIDCreated[0].Length - 4))) + 1).ToString().PadLeft(4, '0'); } purchasereceive.receiveNo = generateID; lvm = Session["sessionUserLogin"] as LoginViewModel.userLogin; purchasereceive.createdUser = lvm.userID; purchasereceive.createdDate = DateTime.Now; purchasereceive.proposedBy = lvm.userID; purchasereceive.proposedDate = DateTime.Now; purchasereceive.proposedStatus = isProposed; db.purchaseReceives.Add(purchasereceive); List<string> listProductId = new List<string>(); List<int> listReceive = new List<int>(); #region insertDetail for (int i = 1; i <= countChk; i++) { var colVal = Request.Form["txtProductID_" + i]; if (colVal == "") break; int t_productID = int.Parse(Request.Form["txtProductID_" + i].ToString()); int t_qtyReceive = Request.Form["txtQtyReceive_" + i].ToString() != "" ? Convert.ToInt32(Request.Form["txtQtyReceive_" + i].ToString().Replace('.', ',')) : 0; int t_qtyReturn = Request.Form["txtQtyReturn_" + i].ToString() != "" ? Convert.ToInt32(Request.Form["txtQtyReturn_" + i].ToString().Replace('.', ',')) : 0; listProductId.Add(t_productID.ToString()); listReceive.Add(t_qtyReceive); if (t_qtyReceive > 0) { var editorx = new purchaseReceive.purchaseReceiveDetail() { receiveNo = purchasereceive.receiveNo, productId = t_productID, qty = t_qtyReceive }; db.purchaseReceiveDetails.Add(editorx); } if (t_qtyReturn > 0) { var editory = new purchaseReceive.purchaseReturnDetail() { receiveNo = purchasereceive.receiveNo, productId = t_productID, qty = t_qtyReturn }; db.purchaseReturnDetails.Add(editory); } } #endregion if(isProposed == true) { #region createInvoice PurchaseInvoiceController pIv = new PurchaseInvoiceController(); string prefixInvoice = pIv.prefix; string generateIDInvoice = prefixInvoice + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString("d2"); string generateIDInvoiceSequence = ""; var invIDCreated = db.purchaseInvoices.Where(x => x.purchaseInvoiceNo.Contains(generateIDInvoice)).OrderByDescending(x => x.createdDate).Select(x => x.purchaseInvoiceNo).ToList(); if (invIDCreated.Count == 0) { generateIDInvoiceSequence = generateIDInvoice + "0001"; } else { generateIDInvoiceSequence = generateIDInvoice + (Convert.ToInt32(invIDCreated[0].Substring((invIDCreated[0].Length - 4))) + 1).ToString().PadLeft(4, '0'); } var headerPO = db.purchaseOrderHeaders.Where(x => x.poId == purchasereceive.poId).ToList(); var topPOMultiple = db.purchaseOrderTOPs.Where(x => x.poId == purchasereceive.poId).ToList(); purchaseInvoice purchaseinvoice = new purchaseInvoice(); purchaseinvoice.invoiceDate = purchasereceive.proposedDate; purchaseinvoice.receiveNo = purchasereceive.receiveNo; purchaseinvoice.createdUser = purchasereceive.proposedBy; purchaseinvoice.createdDate = purchasereceive.proposedDate; purchaseinvoice.remarks = purchasereceive.remarks; if (headerPO[0].topType == "Single") { purchaseinvoice.purchaseInvoiceNo = generateIDInvoiceSequence; purchaseinvoice.dueDate = purchasereceive.proposedDate.AddDays(headerPO[0].topAmount); decimal total = 0; for (int i = 1; i <= countChk; i++) { var colVal = Request.Form["txtProductID_" + i]; if (colVal == "") break; int t_productID = int.Parse(Request.Form["txtProductID_" + i].ToString()); int t_qtyReceive = Request.Form["txtQtyReceive_" + i].ToString() != "" ? Convert.ToInt32(Request.Form["txtQtyReceive_" + i].ToString().Replace('.', ',')) : 0; int t_qtyReturn = Request.Form["txtQtyReturn_" + i].ToString() != "" ? Convert.ToInt32(Request.Form["txtQtyReturn_" + i].ToString().Replace('.', ',')) : 0; var poInfo = db.purchaseOrderDetails.Where(x => x.poId == purchasereceive.poId && x.productID == t_productID).ToList(); foreach (var ax in poInfo as IEnumerable<purchaseOrderHeader.purchaseOrderDetail>) { total += ((t_qtyReceive * ax.price) - (((t_qtyReceive * ax.price) * ax.disc) / 100)); } } var poInfoH = db.purchaseOrderHeaders.Where(x => x.poId == purchasereceive.poId).ToList(); foreach (var axH in poInfoH as IEnumerable<purchaseOrderHeader>) { total = (total - ((total * axH.disc) / 100)); total = (total + ((total * axH.ppn) / 100)); } purchaseinvoice.total = total; db.purchaseInvoices.Add(purchaseinvoice); } else if (headerPO[0].topType == "Multiple") { for (int a = 0; a < topPOMultiple.Count; a++) { purchaseinvoice.purchaseInvoiceNo = generateIDInvoiceSequence; purchaseinvoice.dueDate = topPOMultiple[a].buyDate; int prodId = int.Parse(listProductId[0]); var poInfo = db.purchaseOrderDetails.Where(x => x.poId == purchasereceive.poId && x.productID == prodId).ToList(); decimal total = ((poInfo[0].qty * poInfo[0].price) - ((poInfo[0].qty * poInfo[0].price) / 100)); purchaseinvoice.total = total; db.purchaseInvoices.Add(purchaseinvoice); generateIDInvoiceSequence = generateIDInvoice + (Convert.ToInt32(generateIDInvoiceSequence.Substring((generateIDInvoiceSequence.Length - 4))) + 1).ToString().PadLeft(4, '0'); } db.purchaseInvoices.Add(purchaseinvoice); } #endregion } db.SaveChanges(); ts.Complete(); } return RedirectToAction("Index"); } catch (Exception exc) { string a = exc.Message; } } return View(purchasereceive); }