public ActionResult UpdateOrdersBulkSingle(Order Order, OrderRecipientInfo shipmentAndRecipientInfo) { // get properties of tenant try { if (ModelState.IsValid) { var orderDetailsList = GaneOrderDetailsSessionHelper.GetOrderDetailSession(shipmentAndRecipientInfo.PageSessionToken); var orderNotesList = GaneOrderNotesSessionHelper.GetOrderNotesSession(shipmentAndRecipientInfo.PageSessionToken); OrderService.UpdateWorksOrderBulkSingle(Order, shipmentAndRecipientInfo, CurrentTenantId, CurrentWarehouseId, CurrentUserId, Mapper.Map(orderDetailsList, new List <OrderDetail>()), orderNotesList); GaneOrderDetailsSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); GaneOrderNotesSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); return(Json(new { success = true, message = "Saved" }, JsonRequestBehavior.AllowGet)); } SetViewBagItems(); ViewBag.OrderDetails = Order.OrderDetails; ViewBag.OrderProcesses = Order.OrderProcess; ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "AccountID", "CompanyName", Order.AccountID); return(Json(new { success = false, message = "Model state not valid, failed to save!" }, JsonRequestBehavior.AllowGet)); } catch (Exception Exp) { SetViewBagItems(); ViewBag.OrderDetails = Order.OrderDetails; ViewBag.OrderProcesses = Order.OrderProcess; ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "AccountID", "CompanyName", Order.AccountID); ModelState.AddModelError("", Exp.Message); return(Json(new { success = false, message = Exp.Message }, JsonRequestBehavior.AllowGet)); } }
public async Task <ActionResult> Create(Order Order, OrderRecipientInfo shipmentAndRecipientInfo) { // get properties of tenant try { if (ModelState.IsValid) { var tempList = GaneOrderDetailsSessionHelper.GetOrderDetailSession(shipmentAndRecipientInfo.PageSessionToken); var orderNotesList = GaneOrderNotesSessionHelper.GetOrderNotesSession(shipmentAndRecipientInfo.PageSessionToken); OrderService.CreateWorksOrder(Order, shipmentAndRecipientInfo, CurrentTenantId, CurrentWarehouseId, CurrentUserId, Mapper.Map(tempList, new List <OrderDetail>()), orderNotesList); var result = await _ganeConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Works order logged", Mapper.Map(Order, new OrderViewModel()), sendImmediately : true, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : WorksOrderNotificationTypeEnum.WorksOrderLogTemplate); if (result != "Success") { TempData["Error"] = result; } return(AnchoredOrderIndex("WorksOrders", "Index", ViewBag.Fragment as string)); } SetViewBagItems(); ViewBag.OrderDetails = Order.OrderDetails; ViewBag.OrderProcesses = Order.OrderProcess; ViewBag.ForceRegeneratePageToken = "True"; ViewBag.ForceRegeneratedPageToken = shipmentAndRecipientInfo.PageSessionToken ?? Guid.NewGuid().ToString(); ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "AccountID", "CompanyName", Order.AccountID); return(View(Order)); } catch (Exception Exp) { if (Exp.InnerException != null && Exp.InnerException.Message == "Duplicate Order Number") { ModelState.AddModelError("OrderNumber", Exp.Message); } else if (Exp.InnerException != null && Exp.InnerException.Message.Contains("Template")) { ModelState.AddModelError("PropertyTenantIds", Exp.Message); } else { ModelState.AddModelError(string.Empty, Exp.Message); } SetViewBagItems(); ViewBag.ForceRegeneratePageToken = "True"; ViewBag.ForceRegeneratedPageToken = shipmentAndRecipientInfo.PageSessionToken ?? Guid.NewGuid().ToString(); ViewBag.OrderDetails = Order.OrderDetails; ViewBag.OrderProcesses = Order.OrderProcess; ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "AccountID", "CompanyName", Order.AccountID); return(View(Order)); } }
public async Task <JsonResult> SaveCustomEmails(OrderRecipientInfo shipmentAndRecipientInfo) { if (string.IsNullOrEmpty(shipmentAndRecipientInfo.CustomRecipients) && shipmentAndRecipientInfo.AccountEmailContacts == null) { return(Json(false, JsonRequestBehavior.AllowGet)); } else { var Order = OrderService.GetOrderById(shipmentAndRecipientInfo.orderId ?? 0); if (shipmentAndRecipientInfo.InventoryTransactionType == 8) { var orderprocess = OrderService.GetOrderProcessByOrderProcessId(shipmentAndRecipientInfo.orderId ?? 0); Order = orderprocess.Order; } AccountServices.UpdateOrderPTenantEmailRecipients(shipmentAndRecipientInfo.AccountEmailContacts, Order.OrderID, CurrentUserId); if (shipmentAndRecipientInfo.InventoryTransactionType == 8) { var report = CreateDeliveryNotePrint(shipmentAndRecipientInfo.orderId ?? 0, null); PrepareDirectory("~/UploadedFiles/reports/dn/"); var reportPath = "~/UploadedFiles/reports/dn/" + Order.OrderNumber + ".pdf"; report.ExportToPdf(Server.MapPath(reportPath)); var result = await GaneConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Sales Order Confirmation", Mapper.Map(Order, new OrderViewModel()), reportPath, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : WorksOrderNotificationTypeEnum.SalesOrderUpdateTemplate); return(Json(result, JsonRequestBehavior.AllowGet)); } else if (Order.InventoryTransactionTypeId == (int)InventoryTransactionTypeEnum.SalesOrder) { var report = CreateSalesOrderPrint(Order.OrderID); PrepareDirectory("~/UploadedFiles/reports/so/"); var reportPath = "~/UploadedFiles/reports/so/" + Order.OrderNumber + ".pdf"; report.ExportToPdf(Server.MapPath(reportPath)); var result = await GaneConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Sales order", Mapper.Map(Order, new OrderViewModel()), reportPath, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : WorksOrderNotificationTypeEnum.SalesOrderTemplate); return(Json(result, JsonRequestBehavior.AllowGet)); } else { var report = CreatePurchaseOrderPrint(Order.OrderID); PrepareDirectory("~/UploadedFiles/reports/po/"); var reportPath = "~/UploadedFiles/reports/po/" + Order.OrderNumber + ".pdf"; report.ExportToPdf(Server.MapPath(reportPath)); var result = await GaneConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Purchase Order", Mapper.Map(Order, new OrderViewModel()), reportPath, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : WorksOrderNotificationTypeEnum.PurchaseOrderTemplate); return(Json(result, JsonRequestBehavior.AllowGet)); } } }
public async Task <ActionResult> Edit(Order Order, OrderRecipientInfo shipmentAndRecipientInfo, string orderSaveAndComplete, string orderSaveAndProcess) { var orderCompleted = false; if (orderSaveAndComplete == "1") { Order.OrderStatusID = (int)OrderStatusEnum.Complete; orderCompleted = true; } if (ModelState.IsValid) { var tempList = GaneOrderDetailsSessionHelper.GetOrderDetailSession(shipmentAndRecipientInfo.PageSessionToken); var orderNotesList = GaneOrderNotesSessionHelper.GetOrderNotesSession(shipmentAndRecipientInfo.PageSessionToken); OrderService.SaveWorksOrder(Order, shipmentAndRecipientInfo, CurrentTenantId, CurrentWarehouseId, CurrentUserId, orderCompleted, Mapper.Map(tempList, new List <OrderDetail>()), orderNotesList); if (orderCompleted) { try { if (shipmentAndRecipientInfo.SendEmailWithAttachment) { var result = await _ganeConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Works order completed", Mapper.Map(Order, new OrderViewModel()), sendImmediately : true, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : WorksOrderNotificationTypeEnum.WorksOrderCompletedTemplate); if (result != "Success") { TempData["Error"] = result; } } } catch (Exception ex) { throw new Exception("Exception while creating tenant email notification queue - " + ex.Message.ToString(), ex.InnerException); } } ViewBag.Fragment = Request.Form["fragment"]; if (orderSaveAndProcess == "1") { return(Redirect(Url.RouteUrl(new { controller = "WorksOrders", action = "ProcessOrder", id = Order.OrderID }) + "?fragment=" + ViewBag.Fragment as string)); } return(AnchoredOrderIndex("WorksOrders", "Index", ViewBag.Fragment as string)); } ViewBag.ForceRegeneratePageToken = "True"; ViewBag.ForceRegeneratedPageToken = shipmentAndRecipientInfo.PageSessionToken ?? Guid.NewGuid().ToString(); SetViewBagItems(Order); ViewBag.POStatusID = new SelectList(LookupServices.GetAllOrderStatuses(), "OrderStatusID", "Status", Order.OrderStatusID); ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "SupplierID", "CompanyName", Order.AccountID); return(View(Order)); }
public Order SaveSalesOrder(Order order, OrderRecipientInfo shipmentAndRecipientInfo, int tenantId, int warehouseId, int userId, List <OrderDetail> orderDetails = null, List <OrderNotes> orderNotes = null) { return(SalesOrderService.SaveSalesOrder(order, shipmentAndRecipientInfo, tenantId, warehouseId, userId, orderDetails, orderNotes)); }
public Order SaveWorksOrderBulkSingle(Order order, OrderRecipientInfo shipmentAndRecipientInfo, int tenantId, int warehouseId, int userId, List <OrderDetail> orderDetails = null, IEnumerable <OrderNotes> orderNotes = null) { return(WorksOrderService.SaveWorksOrderBulkSingle(order, shipmentAndRecipientInfo, tenantId, warehouseId, userId, orderDetails, orderNotes)); }
public Order CreateSalesOrder(Order order, OrderRecipientInfo shipmentAndRecipientInfo, int tenantId, int warehouseId, int userId, List <OrderDetail> orderDetails = null, List <OrderNotes> orderNotes = null) { order.OrderNumber = order.OrderNumber.Trim(); var duplicateOrder = _currentDbContext.Order.FirstOrDefault(m => m.OrderNumber.Equals(order.OrderNumber, StringComparison.CurrentCultureIgnoreCase)); if (duplicateOrder != null) { throw new Exception($"Order Number {order.OrderNumber} already associated with another Order. Please regenerate order number.", new Exception("Duplicate Order Number")); } order.IssueDate = DateTime.UtcNow; order.OrderStatusID = (int)OrderStatusEnum.Active; order.DateCreated = DateTime.UtcNow; order.DateUpdated = DateTime.UtcNow; order.TenentId = tenantId; order.CreatedBy = userId; order.UpdatedBy = userId; order.WarehouseId = warehouseId; if (order.AccountID > 0) { var account = _currentDbContext.Account.Find(order.AccountID); if (account != null) { order.AccountCurrencyID = account.CurrencyID; } } if (!caCurrent.CurrentWarehouse().AutoAllowProcess) { order.OrderStatusID = _currentDbContext.OrderStatus.First(a => a.OrderStatusID == (int)OrderStatusEnum.Hold).OrderStatusID; } else { order.OrderStatusID = _currentDbContext.OrderStatus.First(a => a.OrderStatusID == (int)OrderStatusEnum.Active).OrderStatusID; } _currentDbContext.Order.Add(order); if (orderDetails != null) { if (orderDetails.Any(m => m.OrderDetailStatusId == (int)OrderStatusEnum.AwaitingAuthorisation)) { order.OrderStatusID = (int)OrderStatusEnum.AwaitingAuthorisation; } decimal?ordTotal = 0; foreach (var item in orderDetails) { item.DateCreated = DateTime.UtcNow; item.CreatedBy = userId; item.OrderID = order.OrderID; item.TenentId = tenantId; item.SortOrder = item.ProductMaster?.ProductGroup?.SortOrder ?? 0; item.ProductMaster = null; item.TaxName = null; item.Warranty = null; item.WarehouseId = warehouseId; order.OrderDetails.Add(item); ordTotal = ordTotal + ((item.Price * item.Qty) + item.TaxAmount); } order.OrderTotal = (decimal)ordTotal; } if (orderNotes != null) { foreach (var item in orderNotes) { item.DateCreated = DateTime.UtcNow; item.CreatedBy = userId; item.OrderID = order.OrderID; item.TenantId = tenantId; order.OrderNotes.Add(item); } } if (shipmentAndRecipientInfo.AddAddressToAccount == true && order.AccountID > 0 && (!order.ShipmentAccountAddressId.HasValue || order.ShipmentAccountAddressId < 1)) { var account = _accountServices.GetAccountsById(order.AccountID.Value); var accountAddress = new AccountAddresses() { AccountID = order.AccountID.Value, AddressLine1 = shipmentAndRecipientInfo.ShipmentAddressLine1, AddressLine2 = shipmentAndRecipientInfo.ShipmentAddressLine2, AddressLine3 = shipmentAndRecipientInfo.ShipmentAddressLine3, Town = shipmentAndRecipientInfo.ShipmentAddressLine4, PostCode = shipmentAndRecipientInfo.ShipmentAddressPostcode, AddTypeShipping = true, CountryID = account.CountryID, CreatedBy = userId, DateCreated = DateTime.UtcNow, IsActive = true, Name = account.CompanyName }; _currentDbContext.AccountAddresses.Add(accountAddress); } if (order.ShipmentAccountAddressId < 1) { order.ShipmentAccountAddressId = (int?)null; } if (order.ConsignmentTypeId == 4) { order.ShipmentAddressLine1 = _currentDbContext.ConsignmentTypes.FirstOrDefault(u => u.ConsignmentTypeId == 4)?.ConsignmentType; order.ShipmentAddressLine2 = null; order.ShipmentAddressLine3 = null; order.ShipmentAddressLine4 = null; order.ShipmentAddressPostcode = null; order.ShipmentAccountAddressId = (int?)null; } #region SendEmailWithAttachment if (shipmentAndRecipientInfo.SendEmailWithAttachment) { if (shipmentAndRecipientInfo.AccountEmailContacts != null && shipmentAndRecipientInfo.AccountEmailContacts.Length > 0) { foreach (var item in shipmentAndRecipientInfo.AccountEmailContacts) { string email = ""; var secondryAddress = _currentDbContext.AccountContacts.Where(u => u.AccountContactId == item).AsNoTracking().FirstOrDefault(); if (secondryAddress != null) { email = secondryAddress.ContactEmail; } var recipient = new OrderPTenantEmailRecipient() { OrderId = order.OrderID, EmailAddress = email, AccountContactId = item, UpdatedBy = userId, DateUpdated = DateTime.UtcNow, }; _currentDbContext.OrderPTenantEmailRecipients.Add(recipient); } } } #endregion _currentDbContext.SaveChanges(); Inventory.StockRecalculateByOrderId(order.OrderID, warehouseId, tenantId, caCurrent.CurrentUser().UserId); return(order); }
public Order SaveSalesOrder(Order order, OrderRecipientInfo shipmentAndRecipientInfo, int tenantId, int warehouseId, int userId, List <OrderDetail> orderDetails = null, List <OrderNotes> orderNotes = null) { decimal total = 0; if (orderDetails != null) { var toAdd = orderDetails.Where(a => a.OrderDetailID < 0).ToList(); var cItems = orderDetails.Where(a => a.OrderDetailID > 0).ToList(); var toDelete = _currentDbContext.OrderDetail.Where(a => a.OrderID == order.OrderID && a.IsDeleted != true).Select(a => a.OrderDetailID).Except(cItems.Select(a => a.OrderDetailID).ToList()); foreach (var item in toDelete) { var dItem = _currentDbContext.OrderDetail.FirstOrDefault(a => a.OrderDetailID == item); dItem.IsDeleted = true; } foreach (var item in toAdd) { int?taxId = item.TaxID; int?warrantyId = item.WarrantyID; int productId = item.ProductId; item.DateCreated = DateTime.UtcNow; item.CreatedBy = userId; item.TenentId = tenantId; item.OrderID = order.OrderID; total = total + item.TotalAmount; item.TenentId = tenantId; item.WarehouseId = warehouseId; item.IsDeleted = null; if (item.WarrantyID > 0) { bool warrantyTypePercent = false; var warranty = _currentDbContext.TenantWarranty.AsNoTracking().FirstOrDefault(x => x.WarrantyID == item.WarrantyID); if (warranty != null) { warrantyTypePercent = warranty.IsPercent; } if (warrantyTypePercent) { item.WarrantyAmount = (item.TotalAmount / 100) * item.Warranty.PercentageOfPrice; } else { item.WarrantyAmount = item.Warranty.FixedPrice; } } // fix navigation issue item.ProductMaster = null; item.TaxName = null; item.Warranty = null; item.ProductId = productId; item.TaxID = taxId; item.WarrantyID = warrantyId; if (item.OrderDetailID > 0) { _currentDbContext.Entry(item).State = EntityState.Modified; } else { _currentDbContext.OrderDetail.Add(item); } _currentDbContext.SaveChanges(); } foreach (var item in cItems) { var orderDetail = _currentDbContext.OrderDetail.Find(item.OrderDetailID); orderDetail.ProductId = item.ProductId; orderDetail.ExpectedDate = item.ExpectedDate; orderDetail.Qty = item.Qty; orderDetail.Price = item.Price; orderDetail.WarrantyID = item.WarrantyID; orderDetail.TaxID = item.TaxID; orderDetail.Notes = item.Notes; orderDetail.TaxAmount = item.TaxAmount; orderDetail.TotalAmount = item.TotalAmount; orderDetail.WarrantyAmount = item.WarrantyAmount; _currentDbContext.Entry(orderDetail).State = EntityState.Modified; total = total + item.TotalAmount; } _currentDbContext.SaveChanges(); } else { foreach (var item in _currentDbContext.OrderDetail.Where(a => a.OrderID == order.OrderID && a.IsDeleted != true)) { item.IsDeleted = true; } } if (orderNotes != null) { if (orderNotes.Count == 0) { var cItems = _currentDbContext.OrderNotes.Where(a => a.OrderID == order.OrderID && a.IsDeleted != true && a.TenantId == tenantId).ToList(); cItems.ForEach(m => { m.DateUpdated = DateTime.UtcNow; m.UpdatedBy = userId; m.IsDeleted = true; }); } else { orderNotes.Where(a => a.OrderNoteId < 0).ToList().ForEach(m => { m.DateCreated = DateTime.UtcNow; m.CreatedBy = userId; m.TenantId = tenantId; m.OrderID = order.OrderID; _currentDbContext.OrderNotes.Add(m); _currentDbContext.SaveChanges(); }); } } order.OrderTotal = total; if (shipmentAndRecipientInfo.AddAddressToAccount == true && shipmentAndRecipientInfo.ShipmentAddressLine1 != null && order.AccountID > 0 && (!order.ShipmentAccountAddressId.HasValue || order.ShipmentAccountAddressId < 1)) { var account = _accountServices.GetAccountsById(order.AccountID.Value); var accountAddress = new AccountAddresses() { AccountID = order.AccountID.Value, AddressLine1 = shipmentAndRecipientInfo.ShipmentAddressLine1, AddressLine2 = shipmentAndRecipientInfo.ShipmentAddressLine2, AddressLine3 = shipmentAndRecipientInfo.ShipmentAddressLine3, Town = shipmentAndRecipientInfo.ShipmentAddressLine4, PostCode = shipmentAndRecipientInfo.ShipmentAddressPostcode, AddTypeShipping = true, CountryID = account.CountryID, CreatedBy = userId, DateCreated = DateTime.UtcNow, IsActive = true, Name = account.CompanyName }; _currentDbContext.AccountAddresses.Add(accountAddress); } var obj = _currentDbContext.Order.Find(order.OrderID); if (obj != null) { _currentDbContext.Entry(obj).State = System.Data.Entity.EntityState.Detached; order.CreatedBy = obj.CreatedBy; order.DateCreated = obj.DateCreated; //order.OrderStatusID = obj.OrderStatusID; order.TenentId = obj.TenentId; order.WarehouseId = obj.WarehouseId; if (order.ShipmentAccountAddressId < 1) { order.ShipmentAccountAddressId = (int?)null; } order.InventoryTransactionTypeId = obj.InventoryTransactionTypeId; obj.OrderNumber = order.OrderNumber.Trim(); obj.DateUpdated = DateTime.UtcNow; obj.UpdatedBy = userId; obj.WarehouseId = warehouseId; if (order.ConsignmentTypeId == 4) { order.ShipmentAddressLine1 = _currentDbContext.ConsignmentTypes.FirstOrDefault(u => u.ConsignmentTypeId == 4)?.ConsignmentType; order.ShipmentAddressLine2 = null; order.ShipmentAddressLine3 = null; order.ShipmentAddressLine4 = null; order.ShipmentAddressPostcode = null; order.ShipmentAccountAddressId = (int?)null; } #region SendEmailWithAttachment if (shipmentAndRecipientInfo.SendEmailWithAttachment) { List <OrderPTenantEmailRecipient> accountids = _currentDbContext.OrderPTenantEmailRecipients.Where(a => a.OrderId == order.OrderID && a.IsDeleted != false).ToList(); if (accountids.Count > 0) { accountids.ForEach(u => u.IsDeleted = true); } if (shipmentAndRecipientInfo.AccountEmailContacts != null && shipmentAndRecipientInfo.AccountEmailContacts.Length > 0) { foreach (var item in shipmentAndRecipientInfo.AccountEmailContacts) { string email = ""; var secondryAddress = _currentDbContext.AccountContacts.Where(u => u.AccountContactId == item).AsNoTracking().FirstOrDefault(); if (secondryAddress != null) { email = secondryAddress.ContactEmail; } var recipient = new OrderPTenantEmailRecipient() { OrderId = order.OrderID, EmailAddress = email, AccountContactId = item, UpdatedBy = userId, DateUpdated = DateTime.UtcNow, }; _currentDbContext.OrderPTenantEmailRecipients.Add(recipient); } } } else { List <OrderPTenantEmailRecipient> accountids = _currentDbContext.OrderPTenantEmailRecipients.Where(a => a.OrderId == order.OrderID && a.IsDeleted != false).ToList(); if (accountids.Count > 0) { accountids.ForEach(u => u.IsDeleted = true); } } #endregion _currentDbContext.Order.Attach(order); _currentDbContext.Entry(order).State = EntityState.Modified; } _currentDbContext.SaveChanges(); Inventory.StockRecalculateByOrderId(order.OrderID, warehouseId, tenantId, caCurrent.CurrentUser().UserId); return(obj); }
public async Task <ActionResult> Edit(Order Order, FormCollection formCollection, OrderRecipientInfo shipmentAndRecipientInfo, string orderSaveAndProcess, int EmailTemplate) { if (ModelState.IsValid) { Order.OrderNumber = Order.OrderNumber.Trim(); // get properties of user caUser user = caCurrent.CurrentUser(); Order.DateUpdated = DateTime.UtcNow; Order.UpdatedBy = user.UserId; Order.WarehouseId = CurrentWarehouseId; var items = GaneOrderDetailsSessionHelper.GetOrderDetailSession(shipmentAndRecipientInfo.PageSessionToken); var nItems = GaneOrderNotesSessionHelper.GetOrderNotesSession(shipmentAndRecipientInfo.PageSessionToken); Order = OrderService.SaveSalesOrder(Order, shipmentAndRecipientInfo, CurrentTenantId, CurrentWarehouseId, CurrentUserId, Mapper.Map(items, new List <OrderDetail>()), nItems); if (shipmentAndRecipientInfo.SendEmailWithAttachment) { var report = CreateSalesOrderPrint(Order.OrderID); PrepareDirectory("~/UploadedFiles/reports/so/"); var reportPath = "~/UploadedFiles/reports/so/" + Order.OrderNumber + ".pdf"; report.ExportToPdf(Server.MapPath(reportPath)); var result = await GaneConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Sales order has been updated", Mapper.Map(Order, new OrderViewModel()), reportPath, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : (WorksOrderNotificationTypeEnum)EmailTemplate); if (result != "Success") { TempData["Error"] = result; } } if (Order.OrderStatusID == (int)OrderStatusEnum.AwaitingAuthorisation) { var result = await GaneConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Order Requires Authorisation", Mapper.Map(Order, new OrderViewModel()), null, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : WorksOrderNotificationTypeEnum.AwaitingOrderTemplate); if (result != "Success") { TempData["Error"] = result; } } GaneOrderDetailsSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); GaneOrderNotesSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); ViewBag.Fragment = Request.Form["fragment"]; if (orderSaveAndProcess == "1") { return(Redirect(Url.RouteUrl(new { controller = "SalesOrders", action = "ProcessOrder", id = Order.OrderID }) + "?fragment=" + ViewBag.Fragment as string)); } return(AnchoredOrderIndex("SalesOrders", "Index", ViewBag.Fragment as string)); } ViewBag.ForceRegeneratePageToken = "True"; ViewBag.ForceRegeneratedPageToken = shipmentAndRecipientInfo.PageSessionToken ?? Guid.NewGuid().ToString(); SetViewBagItems(CurrentTenant, EnumAccountType.Customer); ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "SupplierID", "CompanyName", Order.AccountID); ViewBag.AccountAddresses = new List <SelectListItem>(); if (Order.AccountID > 0) { var account = AccountServices.GetAccountsById(Order.AccountID.Value); ViewBag.AccountAddresses = new SelectList(account.AccountAddresses, "AddressID", "FullAddressValue", Order.ShipmentAccountAddressId); if (Order.ConsignmentTypeId.HasValue && Order.ConsignmentTypeId.Value != (int)ConsignmentTypeEnum.Collection && Order.ShipmentAccountAddressId > 0) { ViewBag.ShipmentAccountAddressId = Order.ShipmentAccountAddressId; ViewBag.IsShipmentToAccountAddress = true; ViewBag.IsShipmentToCustomAddress = false; } else { ViewBag.ShipmentAccountAddressId = 0; ViewBag.IsShipmentToAccountAddress = false; ViewBag.IsShipmentToCustomAddress = true; } } ViewBag.ConsignmentTypes = new SelectList(OrderService.GetAllValidConsignmentTypes(CurrentTenantId), "ConsignmentTypeId", "ConsignmentType", Order.ConsignmentTypeId); return(View(Order)); }
public async Task <ActionResult> Create(Order Order, OrderRecipientInfo shipmentAndRecipientInfo, int EmailTemplate) { try { if (ModelState.IsValid) { var tempNotesList = GaneOrderNotesSessionHelper.GetOrderNotesSession(shipmentAndRecipientInfo.PageSessionToken); var tempList = GaneOrderDetailsSessionHelper.GetOrderDetailSession(shipmentAndRecipientInfo.PageSessionToken); Order = OrderService.CreateSalesOrder(Order, shipmentAndRecipientInfo, CurrentTenantId, CurrentWarehouseId, CurrentUserId, Mapper.Map(tempList, new List <OrderDetail>()), tempNotesList); if (shipmentAndRecipientInfo.SendEmailWithAttachment) { var report = CreateSalesOrderPrint(Order.OrderID); PrepareDirectory("~/UploadedFiles/reports/so/"); var reportPath = "~/UploadedFiles/reports/so/" + Order.OrderNumber + ".pdf"; report.ExportToPdf(Server.MapPath(reportPath)); var result = await GaneConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Sales order", Mapper.Map(Order, new OrderViewModel()), reportPath, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : (WorksOrderNotificationTypeEnum)EmailTemplate); if (result != "Success") { TempData["Error"] = result; } } if (Order.OrderStatusID == (int)OrderStatusEnum.AwaitingAuthorisation) { var result = await GaneConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Order Requires Authorisation", Mapper.Map(Order, new OrderViewModel()), null, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : WorksOrderNotificationTypeEnum.AwaitingOrderTemplate); if (result != "Success") { TempData["Error"] = result; } } //send ingredients email for certain categories var productCategoryTc = _tenantServices.GetTenantConfigById(Order.TenentId)?.ProductCatagories; if (Order.InventoryTransactionTypeId == (int)InventoryTransactionTypeEnum.SalesOrder && !string.IsNullOrEmpty(productCategoryTc)) { var productcategoryList = productCategoryTc.Split(',').Select(int.Parse).ToList(); if (Order.OrderDetails.Any(x => productcategoryList.Contains((int?)x.ProductMaster?.ProductGroupId ?? 0))) { var result = await GaneConfigurationsHelper.SendStandardMailProductGroup(Order.TenentId, Order.OrderNumber, Order.AccountID ?? 0); if (result != "Success") { TempData["Error"] = result; } } } GaneOrderDetailsSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); GaneOrderNotesSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); return(AnchoredOrderIndex("SalesOrders", "Index", "SOA")); } int id = 0; var accountaddress = _accountServices.GetAllValidAccountContactsByAccountId(id, CurrentTenantId); ViewBag.AccountContactes = new SelectList(accountaddress, "AccountContactId", "ContactEmail", accountaddress.Select(x => x.AccountID).FirstOrDefault()); ViewBag.ForceRegeneratePageToken = "True"; ViewBag.ForceRegeneratedPageToken = shipmentAndRecipientInfo.PageSessionToken ?? Guid.NewGuid().ToString(); SetViewBagItems(CurrentTenant, EnumAccountType.Customer); ViewBag.OrderDetails = Order.OrderDetails; ViewBag.OrderProcesses = Order.OrderProcess; ViewBag.IsShipmentToAccountAddress = true; ViewBag.AccountAddresses = new List <SelectListItem>() { new SelectListItem() { Text = "Select", Value = "0" } }; ViewBag.ShipmentAccountAddressId = 0; ViewBag.IsShipmentToCustomAddress = false; ViewBag.ConsignmentTypes = new SelectList(OrderService.GetAllValidConsignmentTypes(CurrentTenantId), "ConsignmentTypeId", "ConsignmentType"); ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "AccountID", "CompanyName", Order.AccountID); return(View(Order)); } catch (Exception Exp) { int ids = 0; var accountaddress = _accountServices.GetAllValidAccountContactsByAccountId(ids, CurrentTenantId); ViewBag.AccountContactes = new SelectList(accountaddress, "AccountContactId", "ContactEmail", accountaddress.Select(x => x.AccountID).FirstOrDefault()); ViewBag.IsShipmentToAccountAddress = true; ViewBag.AccountAddresses = new List <SelectListItem>() { new SelectListItem() { Text = "Select", Value = "0" } }; ViewBag.ShipmentAccountAddressId = 0; ViewBag.IsShipmentToCustomAddress = false; if (Exp.InnerException != null && Exp.InnerException.Message == "Duplicate Order Number") { ModelState.AddModelError("OrderNumber", Exp.Message); } else { ModelState.AddModelError("", Exp.Message); } var tenent = caCurrent.CurrentTenant(); SetViewBagItems(tenent, EnumAccountType.Customer); ViewBag.OrderDetails = Order.OrderDetails; ViewBag.OrderProcesses = Order.OrderProcess; ViewBag.ForceRegeneratePageToken = "True"; ViewBag.ForceRegeneratedPageToken = shipmentAndRecipientInfo.PageSessionToken ?? Guid.NewGuid().ToString(); ViewBag.ConsignmentTypes = new SelectList(OrderService.GetAllValidConsignmentTypes(CurrentTenantId), "ConsignmentTypeId", "ConsignmentType"); ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "AccountID", "CompanyName", Order.AccountID); return(View(Order)); } }
public async Task <ActionResult> SaveOrdersBulk(Order Order, FormCollection formCollection, OrderRecipientInfo shipmentAndRecipientInfo) { try { if (Order.OrderGroupToken.HasValue && shipmentAndRecipientInfo.SendEmailWithAttachment) { var orders = OrderService.GetAllOrdersByGroupToken(Order.OrderGroupToken.Value, CurrentTenantId).ToList(); foreach (var order in orders) { try { var result = await _ganeConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{order.OrderNumber} - Works order logged", Mapper.Map(order, new OrderViewModel()), sendImmediately : true, shipmentAndRecipientInfo : shipmentAndRecipientInfo); if (result != "Success") { TempData["Error"] = result; } } catch (Exception ex) { throw ex; } } } if (!string.IsNullOrEmpty(Request.Form["Viewreturn"])) { bool?returnView = Convert.ToBoolean(Request.Form["Viewreturn"]); if (returnView == true) { return(AnchoredOrderIndex("PProperties", "Index", "AO")); } } return(AnchoredOrderIndex("WorksOrders", "Index", ViewBag.Fragment as string)); } catch (Exception Exp) { SetViewBagItems(); ViewBag.OrderDetails = Order.OrderDetails; ViewBag.OrderProcesses = Order.OrderProcess; ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "AccountID", "CompanyName", Order.AccountID); ModelState.AddModelError("", Exp.Message); return(View("CreateBulkSingle")); } }
public async Task <ActionResult> Create(Order Order, OrderRecipientInfo shipmentAndRecipientInfo, int EmailTemplate) { try { if (ModelState.IsValid) { if (shipmentAndRecipientInfo.ShipmentDestination == null || shipmentAndRecipientInfo.TenantAddressID == null) { ViewBag.Error = "Please choose a delivery address"; } else { var orderDetails = GaneOrderDetailsSessionHelper.GetOrderDetailSession(shipmentAndRecipientInfo.PageSessionToken); var orderNotes = GaneOrderNotesSessionHelper.GetOrderNotesSession(shipmentAndRecipientInfo.PageSessionToken); OrderService.CreatePurchaseOrder(Order, shipmentAndRecipientInfo, CurrentTenantId, CurrentWarehouseId, CurrentUserId, Mapper.Map(orderDetails, new List <OrderDetail>()), orderNotes); if (shipmentAndRecipientInfo.SendEmailWithAttachment) { var report = CreatePurchaseOrderPrint(Order.OrderID); PrepareDirectory("~/UploadedFiles/reports/po/"); var reportPath = "~/UploadedFiles/reports/po/" + Order.OrderNumber + ".pdf"; report.ExportToPdf(Server.MapPath(reportPath)); var result = await GaneConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Purchase order", Mapper.Map(Order, new OrderViewModel()), reportPath, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : (WorksOrderNotificationTypeEnum)EmailTemplate); if (result != "Success") { TempData["Error"] = result; } } GaneOrderDetailsSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); GaneOrderNotesSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); return(AnchoredOrderIndex("PurchaseOrders", "Index", "PO")); } } SetViewBagItems(Order, EnumAccountType.Supplier); int id = 0; ViewBag.AllowAccountAddress = caCurrent.CurrentWarehouse().AllowShipToAccountAddress; var accountaddress = _accountServices.GetAllValidAccountContactsByAccountId(id, CurrentTenantId); ViewBag.AccountContactes = new SelectList(accountaddress, "AccountContactId", "ContactEmail", accountaddress.Select(x => x.AccountID).FirstOrDefault()); var directsales = _salesServices.GetDirectSaleOrders(null); ViewBag.DirectOrderList = new SelectList(directsales, "OrderID", "OrderNumber"); if (string.IsNullOrEmpty(shipmentAndRecipientInfo.PageSessionToken)) { ViewBag.ForceRegeneratePageToken = "True"; ViewBag.ForceRegeneratedPageToken = Guid.NewGuid().ToString(); } return(View(Order)); } catch (Exception Exp) { if (Exp.InnerException != null && Exp.InnerException.Message == "Duplicate Order Number") { ModelState.AddModelError("OrderNumber", Exp.Message); } else { ModelState.AddModelError("", Exp.Message); } SetViewBagItems(Order); int id = 0; var accountaddress = _accountServices.GetAllValidAccountContactsByAccountId(id, CurrentTenantId); ViewBag.AccountContactes = new SelectList(accountaddress, "AccountContactId", "ContactEmail", accountaddress.Select(x => x.AccountID).FirstOrDefault()); ViewBag.ForceRegeneratePageToken = "True"; ViewBag.ForceRegeneratedPageToken = shipmentAndRecipientInfo.PageSessionToken ?? Guid.NewGuid().ToString(); var directsales = _salesServices.GetDirectSaleOrders(null); ViewBag.DirectOrderList = new SelectList(directsales, "OrderID", "OrderNumber"); return(View(Order)); } }
public async Task <ActionResult> Edit([Bind(Include = "OrderID,OrderNumber,DirectShip,ExpectedDate,Note,AccountID,OrderTypeID,LoanID,OrderStatusID,AccountContactId,Posted,PPropertyId,DepartmentId,InvoiceNo,InvoiceDetails,OrderCost,IsCollectionFromCustomerSide")] Order Order, OrderRecipientInfo shipmentAndRecipientInfo, string orderSaveAndProcess, int EmailTemplate) { if (ModelState.IsValid) { var items = GaneOrderDetailsSessionHelper.GetOrderDetailSession(shipmentAndRecipientInfo.PageSessionToken); var orderNotes = GaneOrderNotesSessionHelper.GetOrderNotesSession(shipmentAndRecipientInfo.PageSessionToken); OrderService.SavePurchaseOrder(Order, shipmentAndRecipientInfo, CurrentTenantId, CurrentWarehouseId, CurrentUserId, Mapper.Map(items, new List <OrderDetail>()), orderNotes); if (shipmentAndRecipientInfo.SendEmailWithAttachment) { var report = CreatePurchaseOrderPrint(Order.OrderID); PrepareDirectory("~/UploadedFiles/reports/po/"); var reportPath = "~/UploadedFiles/reports/po/" + Order.OrderNumber + ".pdf"; report.ExportToPdf(Server.MapPath(reportPath)); var result = await GaneConfigurationsHelper.CreateTenantEmailNotificationQueue($"#{Order.OrderNumber} - Purchase order has been updated", Mapper.Map(Order, new OrderViewModel()), reportPath, shipmentAndRecipientInfo : shipmentAndRecipientInfo, worksOrderNotificationType : (WorksOrderNotificationTypeEnum)EmailTemplate); if (result != "Success") { TempData["Error"] = result; } } GaneOrderDetailsSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); GaneOrderNotesSessionHelper.ClearSessionTokenData(shipmentAndRecipientInfo.PageSessionToken); ViewBag.Fragment = Request.Form["fragment"]; if (orderSaveAndProcess == "1") { return(Redirect(Url.RouteUrl(new { controller = "PurchaseOrders", action = "ReceivePO", id = Order.OrderID }) + "?fragment=" + ViewBag.Fragment as string)); } return(AnchoredOrderIndex("PurchaseOrders", "Index", ViewBag.Fragment as string)); } ViewBag.AllowAccountAddress = caCurrent.CurrentWarehouse()?.AllowShipToAccountAddress; ViewBag.ForceRegeneratePageToken = "True"; ViewBag.ForceRegeneratedPageToken = shipmentAndRecipientInfo.PageSessionToken ?? Guid.NewGuid().ToString(); SetViewBagItems(null, EnumAccountType.Supplier); ViewBag.SupplierID = new SelectList(AccountServices.GetAllValidAccounts(CurrentTenantId, EnumAccountType.Supplier), "SupplierID", "CompanyName", Order.AccountID); return(View(Order)); }
public Order SaveWorksOrder(Order order, OrderRecipientInfo shipmentAndRecipientInfo, int tenantId, int warehouseId, int userId, bool isOrderComplete, List <OrderDetail> orderDetails = null, IEnumerable <OrderNotes> orderNotes = null) { order.OrderNumber = order.OrderNumber.Trim(); order.DateUpdated = DateTime.UtcNow; order.UpdatedBy = userId; order.WarehouseId = warehouseId; decimal total = 0; if (orderDetails != null) { var toAdd = orderDetails.Where(a => a.OrderDetailID < 0).ToList(); var cItems = orderDetails.Where(a => a.OrderDetailID > 0).ToList(); var recentlyUpdatedIds = new List <int>(); foreach (var item in toAdd) { int?taxId = item.TaxID; int?warrantyId = item.WarrantyID; int productId = item.ProductId; item.DateCreated = DateTime.UtcNow; item.CreatedBy = userId; item.TenentId = tenantId; item.OrderID = order.OrderID; total = total + item.TotalAmount; item.TenentId = tenantId; item.WarehouseId = warehouseId; total = total + item.TotalAmount; if (item.WarrantyID > 0) { var warranty = _currentDbContext.TenantWarranty.Find(item.WarrantyID); if (warranty.IsPercent) { item.WarrantyAmount = (item.TotalAmount / 100) * item.Warranty.PercentageOfPrice; } else { item.WarrantyAmount = item.Warranty.FixedPrice; } } // fix navigation issue item.ProductMaster = null; item.TaxName = null; item.Warranty = null; item.ProductId = productId; item.TaxID = taxId; item.WarrantyID = warrantyId; if (item.OrderDetailID > 0) { _currentDbContext.Entry(item).State = EntityState.Modified; } else { _currentDbContext.OrderDetail.Add(item); } _currentDbContext.SaveChanges(); recentlyUpdatedIds.Add(item.OrderDetailID); } var toDelete = _currentDbContext.OrderDetail.Where(a => a.OrderID == order.OrderID && a.IsDeleted != true) .Select(a => a.OrderDetailID) .Except(cItems.Select(a => a.OrderDetailID).ToList().Union(recentlyUpdatedIds)); foreach (var item in toDelete) { var dItem = _currentDbContext.OrderDetail.FirstOrDefault(a => a.OrderDetailID == item); dItem.IsDeleted = true; } foreach (var item in cItems) { var orderDetail = _currentDbContext.OrderDetail.Find(item.OrderDetailID); orderDetail.ProductId = item.ProductId; orderDetail.ExpectedDate = item.ExpectedDate; orderDetail.Qty = item.Qty; orderDetail.Price = item.Price; orderDetail.WarrantyID = item.WarrantyID; orderDetail.TaxID = item.TaxID; orderDetail.Notes = item.Notes; orderDetail.TaxAmount = item.TaxAmount; orderDetail.TotalAmount = item.TotalAmount; orderDetail.WarrantyAmount = item.WarrantyAmount; _currentDbContext.Entry(orderDetail).State = EntityState.Modified; total = total + item.TotalAmount; } } else { foreach (var item in _currentDbContext.OrderDetail.Where(a => a.OrderID == order.OrderID && a.IsDeleted != true)) { item.IsDeleted = true; } } if (orderNotes != null) { if (orderNotes.Count() == 0) { var cItems = _currentDbContext.OrderNotes .Where( a => a.OrderID == order.OrderID && a.IsDeleted != true && a.TenantId == tenantId) .ToList(); cItems.ForEach(m => { m.DateUpdated = DateTime.UtcNow; m.UpdatedBy = userId; m.IsDeleted = true; }); } else { orderNotes.Where(a => a.OrderNoteId < 0) .ToList() .ForEach(m => { m.DateCreated = DateTime.UtcNow; m.CreatedBy = userId; m.TenantId = tenantId; m.OrderID = order.OrderID; _currentDbContext.OrderNotes.Add(m); }); } } order.OrderTotal = total; var obj = _currentDbContext.Order.Find(order.OrderID); if (obj != null) { _currentDbContext.Entry(obj).State = EntityState.Detached; order.CreatedBy = obj.CreatedBy; order.DateCreated = obj.DateCreated; if (order.OrderStatusID == 0) { order.OrderStatusID = obj.OrderStatusID; } order.TenentId = obj.TenentId; order.WarehouseId = obj.WarehouseId; order.InventoryTransactionTypeId = obj.InventoryTransactionTypeId; obj.OrderNumber = order.OrderNumber.Trim(); obj.DateUpdated = DateTime.UtcNow; obj.UpdatedBy = userId; obj.WarehouseId = warehouseId; _currentDbContext.Order.Attach(order); var entry = _currentDbContext.Entry(order); entry.State = EntityState.Modified; } if (!isOrderComplete && shipmentAndRecipientInfo.PropertyTenantIds != null) { foreach (var item in shipmentAndRecipientInfo.PropertyTenantIds) { var ptenantId = item.AsInt(); if (!_currentDbContext.OrderPTenantEmailRecipients.Any(m => m.PTenantId == ptenantId && m.OrderId == order.OrderID)) { var recipient = new OrderPTenantEmailRecipient() { OrderId = order.OrderID, DateUpdated = DateTime.UtcNow, PPropertyId = order.ShipmentPropertyId, PTenantId = item.AsInt() }; _currentDbContext.Entry(recipient).State = EntityState.Added; _currentDbContext.SaveChanges(); } } } _currentDbContext.SaveChanges(); Inventory.StockRecalculateByOrderId(order.OrderID, warehouseId, tenantId, caCurrent.CurrentUser().UserId); return(order); }
public Order UpdateWorksOrderBulkSingle(Order Order, OrderRecipientInfo shipmentAndRecipientInfo, int tenantId, int warehouseId, int userId, List <OrderDetail> orderDetails = null, List <OrderNotes> orderNotes = null) { Order.OrderNumber = Order.OrderNumber.Trim(); Order.IssueDate = DateTime.UtcNow; Order.DateCreated = DateTime.UtcNow; Order.DateUpdated = DateTime.UtcNow; Order.TenentId = tenantId; Order.WarehouseId = warehouseId; Order.CreatedBy = userId; Order.UpdatedBy = userId; Order.InventoryTransactionTypeId = (int)InventoryTransactionTypeEnum.WorksOrder; Order.OrderStatusID = (int)OrderStatusEnum.NotScheduled; Order.ShipmentPropertyId = shipmentAndRecipientInfo.PPropertyID; _currentDbContext.Order.Attach(Order); _currentDbContext.Entry(Order).State = EntityState.Modified; decimal total = 0; if (orderDetails != null) { var toAdd = orderDetails.Where(a => a.OrderDetailID < 0).ToList(); var cItems = orderDetails.Where(a => a.OrderDetailID > 0).ToList(); foreach (var item in toAdd) { item.ProductMaster = null; item.TaxName = null; item.Warranty = null; item.DateCreated = DateTime.UtcNow; item.CreatedBy = userId; item.TenentId = tenantId; item.OrderID = Order.OrderID; total = total + item.TotalAmount; item.TenentId = tenantId; item.WarehouseId = warehouseId; _currentDbContext.OrderDetail.Add(item); } var toDelete = _currentDbContext.OrderDetail.Where(a => a.OrderID == Order.OrderID && a.IsDeleted != true).Select(a => a.OrderDetailID).Except(cItems.Select(a => a.OrderDetailID).ToList()); foreach (var item in toDelete) { var dItem = _currentDbContext.OrderDetail.FirstOrDefault(a => a.OrderDetailID == item); dItem.IsDeleted = true; } foreach (var item in cItems) { total = total + item.TotalAmount; var dItem = _currentDbContext.OrderDetail.FirstOrDefault(a => a.OrderDetailID == item.OrderDetailID); if (dItem != null) { dItem.Qty = item.Qty; dItem.Notes = item.Notes; dItem.Price = item.Price; dItem.TaxID = item.TaxID; dItem.TaxAmount = item.TaxAmount; dItem.WarrantyID = item.WarrantyID; dItem.WarrantyAmount = item.WarrantyAmount; dItem.TotalAmount = item.TotalAmount; dItem.DateUpdated = DateTime.UtcNow; dItem.UpdatedBy = userId; _currentDbContext.Entry(dItem).State = EntityState.Modified; } } } else { foreach (var item in _currentDbContext.OrderDetail.Where(a => a.OrderID == Order.OrderID && a.IsDeleted != true)) { item.IsDeleted = true; } } if (orderNotes != null) { if (orderNotes.Count() == 0) { var cItems = _currentDbContext.OrderNotes.Where(a => a.OrderID == Order.OrderID && a.IsDeleted != true && a.TenantId == tenantId).ToList(); cItems.ForEach(m => { m.DateUpdated = DateTime.UtcNow; m.UpdatedBy = userId; m.IsDeleted = true; _currentDbContext.Entry(m).State = EntityState.Modified; }); } else { orderNotes.Where(a => a.OrderNoteId < 0).ToList().ForEach(m => { m.DateCreated = DateTime.UtcNow; m.CreatedBy = userId; m.TenantId = tenantId; m.OrderID = Order.OrderID; _currentDbContext.OrderNotes.Add(m); }); } } _currentDbContext.SaveChanges(); Inventory.StockRecalculateByOrderId(Order.OrderID, warehouseId, tenantId, caCurrent.CurrentUser().UserId); return(Order); }
public Order SaveWorksOrderBulkSingle(Order order, OrderRecipientInfo shipmentAndRecipientInfo, int tenantId, int warehouseId, int userId, List <OrderDetail> orderDetails = null, IEnumerable <OrderNotes> orderNotes = null) { order.OrderNumber = order.OrderNumber.Trim(); var duplicateOrder = _currentDbContext.Order.FirstOrDefault(m => m.OrderNumber.Equals(order.OrderNumber, StringComparison.CurrentCultureIgnoreCase)); if (duplicateOrder != null) { throw new Exception($"Order Number {order.OrderNumber} already associated with another Order. Please regenerate order number.", new Exception("Duplicate Order Number")); } order.IssueDate = DateTime.UtcNow; order.DateCreated = DateTime.UtcNow; order.DateUpdated = DateTime.UtcNow; order.TenentId = tenantId; order.WarehouseId = warehouseId; order.CreatedBy = userId; order.UpdatedBy = userId; order.InventoryTransactionTypeId = (int)InventoryTransactionTypeEnum.WorksOrder; order.OrderStatusID = (int)OrderStatusEnum.NotScheduled; order.ShipmentPropertyId = shipmentAndRecipientInfo.PPropertyID; _currentDbContext.Order.Add(order); if (orderDetails != null) { decimal?ordTotal = 0; foreach (var item in orderDetails) { item.DateCreated = DateTime.UtcNow; item.CreatedBy = userId; item.OrderID = order.OrderID; item.TenentId = tenantId; item.SortOrder = item.ProductMaster?.ProductGroup?.SortOrder ?? 0; item.ProductMaster = null; item.TaxName = null; item.Warranty = null; item.WarehouseId = warehouseId; order.OrderDetails.Add(item); ordTotal = ordTotal + ((item.Price * item.Qty) + item.TaxAmount); } order.OrderTotal = (decimal)ordTotal; } if (orderNotes != null) { foreach (var item in orderNotes) { item.DateCreated = DateTime.UtcNow; item.CreatedBy = userId; item.OrderID = order.OrderID; item.TenantId = tenantId; order.OrderNotes.Add(item); } } _currentDbContext.SaveChanges(); Inventory.StockRecalculateByOrderId(order.OrderID, warehouseId, tenantId, caCurrent.CurrentUser().UserId); return(order); }