public DTO.SaleOrder UploadClientPOFile(int saleOrderID, string newFile, string oldPointer, string tempFolder, out Library.DTO.Notification notification) { Module.Framework.DAL.DataFactory framework_factory = new Module.Framework.DAL.DataFactory(); DTO.SaleOrder dtoSaleOrder = new DTO.SaleOrder(); notification = new Library.DTO.Notification { Type = Library.DTO.NotificationType.Success, Message = "Upload success" }; try { using (SaleOrderMngEntities context = CreateContext()) { string newPointer = framework_factory.CreateNoneImageFilePointer(tempFolder, newFile, oldPointer); if (saleOrderID > 0) { var saleOrder = context.SaleOrder.Where(o => o.SaleOrderID == saleOrderID).FirstOrDefault(); saleOrder.ClientPOFile = newPointer; context.SaveChanges(); //get return data dtoSaleOrder = GetBackData(saleOrderID, out notification); } } return(dtoSaleOrder); } catch (Exception ex) { notification.Type = Library.DTO.NotificationType.Error; notification.Message = ex.Message; if (ex.InnerException != null && !string.IsNullOrEmpty(ex.InnerException.Message)) { notification.DetailMessage.Add(ex.InnerException.Message); } return(dtoSaleOrder); } }
public bool Revise(int saleOrderID, ref object dtoItem, int setStatusBy, out Library.DTO.Notification notification) { notification = new Library.DTO.Notification() { Type = Library.DTO.NotificationType.Success, Message = "PI has been revised success" }; DTO.SaleOrder dtoItems = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.SaleOrder>(); try { //SAVE DATA Library.DTO.Notification save_nofication = new Library.DTO.Notification { Type = Library.DTO.NotificationType.Success }; if (!UpdateData(setStatusBy, saleOrderID, ref dtoItem, out save_nofication)) { notification = save_nofication; return(false); } //VALIDATE && CONFIRM using (SaleOrderMngEntities context = CreateContext()) { SaleOrderStatus dbSaleOrderStatus = context.SaleOrderStatus.Where(o => o.SaleOrderID == saleOrderID && o.IsCurrentStatus == true).FirstOrDefault(); if (dbSaleOrderStatus.TrackingStatusID != Library.Helper.CONFIRMED && dbSaleOrderStatus.TrackingStatusID != Library.Helper.REVISION_CONFIRMED) { notification = new Library.DTO.Notification() { Message = "PI must be in CONFIRMED status before revise", Type = Library.DTO.NotificationType.Warning }; return(false); } SetPIStatus(saleOrderID, Library.Helper.REVISED, setStatusBy); dtoItems.TrackingStatusNM = Library.Helper.TEXT_STATUS_REVISED; dtoItems.TrackingStatusID = Library.Helper.REVISED; // add item to quotation if needed context.FW_Quotation_function_AddFactoryOrderItem(null, saleOrderID, null); // table lockx and also check if item is available on sql server side return(true); } } catch (Exception ex) { notification.Type = Library.DTO.NotificationType.Error; notification.Message = ex.Message; if (ex.InnerException != null && !string.IsNullOrEmpty(ex.InnerException.Message)) { notification.DetailMessage.Add(ex.InnerException.Message); } return(false); } }
public void DTO2DB_SaleOrder(DTO.SaleOrder dtoItem, ref SaleOrder dbItem) { /* * MAP & CHECK SaleOrder */ List <SaleOrderDetail> itemNeedDelete_Details = new List <SaleOrderDetail>(); List <SaleOrderDetailExtend> itemNeedDelete_DetailExtends; if (dtoItem.SaleOrderDetails != null) { //CHECK foreach (SaleOrderDetail dbDetail in dbItem.SaleOrderDetail) { //DB NOT EXIST IN DTO if (!dtoItem.SaleOrderDetails.Select(s => s.SaleOrderDetailID).Contains(dbDetail.SaleOrderDetailID)) { itemNeedDelete_Details.Add(dbDetail); } else //DB IS EXIST IN DB { itemNeedDelete_DetailExtends = new List <SaleOrderDetailExtend>(); foreach (SaleOrderDetailExtend dbDetailExtend in dbDetail.SaleOrderDetailExtend) { if (!dtoItem.SaleOrderDetails.Where(o => o.SaleOrderDetailID == dbDetail.SaleOrderDetailID).FirstOrDefault().SaleOrderDetailExtends.Select(x => x.SaleOrderDetailExtendID).Contains(dbDetailExtend.SaleOrderDetailExtendID)) { itemNeedDelete_DetailExtends.Add(dbDetailExtend); } } foreach (SaleOrderDetailExtend dbDetailExtend in itemNeedDelete_DetailExtends) { dbDetail.SaleOrderDetailExtend.Remove(dbDetailExtend); } } } foreach (SaleOrderDetail dbDetail in itemNeedDelete_Details) { List <SaleOrderDetailExtend> item_deleteds = new List <SaleOrderDetailExtend>(); foreach (SaleOrderDetailExtend dbDetailExtend in dbDetail.SaleOrderDetailExtend) { item_deleteds.Add(dbDetailExtend); } foreach (SaleOrderDetailExtend item in item_deleteds) { dbItem.SaleOrderDetail.Where(o => o.SaleOrderDetailID == dbDetail.SaleOrderDetailID).FirstOrDefault().SaleOrderDetailExtend.Remove(item); } dbItem.SaleOrderDetail.Remove(dbDetail); } //MAP SaleOrderDetail _dbDetail; SaleOrderDetailExtend _dbDetailExtend; foreach (DTO.SaleOrderDetail dtoDetail in dtoItem.SaleOrderDetails) { if (dtoDetail.SaleOrderDetailID < 0) { _dbDetail = new SaleOrderDetail(); if (dtoDetail.SaleOrderDetailExtends != null) { foreach (DTO.SaleOrderDetailExtend dtoDetailExtend in dtoDetail.SaleOrderDetailExtends) { _dbDetailExtend = new SaleOrderDetailExtend(); _dbDetail.SaleOrderDetailExtend.Add(_dbDetailExtend); AutoMapper.Mapper.Map <DTO.SaleOrderDetailExtend, SaleOrderDetailExtend>(dtoDetailExtend, _dbDetailExtend); } } dbItem.SaleOrderDetail.Add(_dbDetail); } else { _dbDetail = dbItem.SaleOrderDetail.FirstOrDefault(o => o.SaleOrderDetailID == dtoDetail.SaleOrderDetailID); if (_dbDetail != null && dtoDetail.SaleOrderDetailExtends != null) { foreach (DTO.SaleOrderDetailExtend dtoDetailExtend in dtoDetail.SaleOrderDetailExtends) { if (dtoDetailExtend.SaleOrderDetailExtendID < 0) { _dbDetailExtend = new SaleOrderDetailExtend(); _dbDetail.SaleOrderDetailExtend.Add(_dbDetailExtend); } else { _dbDetailExtend = _dbDetail.SaleOrderDetailExtend.FirstOrDefault(o => o.SaleOrderDetailExtendID == dtoDetailExtend.SaleOrderDetailExtendID); } if (_dbDetailExtend != null) { AutoMapper.Mapper.Map <DTO.SaleOrderDetailExtend, SaleOrderDetailExtend>(dtoDetailExtend, _dbDetailExtend); } } } } if (_dbDetail != null) { AutoMapper.Mapper.Map <DTO.SaleOrderDetail, SaleOrderDetail>(dtoDetail, _dbDetail); } } } /* * MAP & CHECK SaleOrderExtend */ List <SaleOrderExtend> ItemNeedDelete_Extends = new List <SaleOrderExtend>(); if (dtoItem.SaleOrderExtends != null) { //CHECK foreach (SaleOrderExtend dbExtend in dbItem.SaleOrderExtend.Where(o => !dtoItem.SaleOrderExtends.Select(s => s.SaleOrderExtendID).Contains(o.SaleOrderExtendID))) { ItemNeedDelete_Extends.Add(dbExtend); } foreach (SaleOrderExtend dbExtend in ItemNeedDelete_Extends) { dbItem.SaleOrderExtend.Remove(dbExtend); } //MAP foreach (DTO.SaleOrderExtend dtoDescription in dtoItem.SaleOrderExtends) { SaleOrderExtend dbExtend; if (dtoDescription.SaleOrderExtendID < 0) { dbExtend = new SaleOrderExtend(); dbItem.SaleOrderExtend.Add(dbExtend); } else { dbExtend = dbItem.SaleOrderExtend.FirstOrDefault(o => o.SaleOrderExtendID == dtoDescription.SaleOrderExtendID); } if (dbExtend != null) { AutoMapper.Mapper.Map <DTO.SaleOrderExtend, SaleOrderExtend>(dtoDescription, dbExtend); } } } /* * MAP & CHECK SaleOrderDetailSparepart */ List <SaleOrderDetailSparepart> itemNeedDelete = new List <SaleOrderDetailSparepart>(); if (dtoItem.SaleOrderDetailSpareparts != null) { //CHECK foreach (SaleOrderDetailSparepart item in dbItem.SaleOrderDetailSparepart.Where(o => !dtoItem.SaleOrderDetailSpareparts.Select(s => s.SaleOrderDetailSparepartID).Contains(o.SaleOrderDetailSparepartID))) { itemNeedDelete.Add(item); } foreach (SaleOrderDetailSparepart item in itemNeedDelete) { dbItem.SaleOrderDetailSparepart.Remove(item); } //MAP foreach (DTO.SaleOrderDetailSparepart item in dtoItem.SaleOrderDetailSpareparts) { SaleOrderDetailSparepart dbSparepart; if (item.SaleOrderDetailSparepartID < 0) { dbSparepart = new SaleOrderDetailSparepart(); dbItem.SaleOrderDetailSparepart.Add(dbSparepart); } else { dbSparepart = dbItem.SaleOrderDetailSparepart.FirstOrDefault(o => o.SaleOrderDetailSparepartID == item.SaleOrderDetailSparepartID); } if (dbSparepart != null) { AutoMapper.Mapper.Map <DTO.SaleOrderDetailSparepart, SaleOrderDetailSparepart>(item, dbSparepart); } } } /* * MAP SaleOrder History */ SaleOrderHistory dbHistory = new SaleOrderHistory(); SaleOrderHistoryDetail dbHistoryDetail; foreach (DTO.SaleOrderDetail dtoDetail in dtoItem.SaleOrderDetails) { dbHistoryDetail = new SaleOrderHistoryDetail(); AutoMapper.Mapper.Map <DTO.SaleOrderDetail, SaleOrderHistoryDetail>(dtoDetail, dbHistoryDetail); dbHistory.SaleOrderHistoryDetail.Add(dbHistoryDetail); } AutoMapper.Mapper.Map <DTO.SaleOrder, SaleOrderHistory>(dtoItem, dbHistory); dbItem.SaleOrderHistory.Add(dbHistory); /* * SETUP FORMATED FIELD */ if (!string.IsNullOrEmpty(dtoItem.InvoiceDateFormated)) { dtoItem.InvoiceDate = DateTime.ParseExact(dtoItem.InvoiceDateFormated, "d", new System.Globalization.CultureInfo("vi-VN")); } else { dtoItem.InvoiceDate = null; } if (!string.IsNullOrEmpty(dtoItem.LDSFormated)) { dtoItem.LDS = DateTime.ParseExact(dtoItem.LDSFormated, "d", new System.Globalization.CultureInfo("vi-VN")); } else { dtoItem.LDS = null; } if (!string.IsNullOrEmpty(dtoItem.DeliveryDateFormated)) { dtoItem.DeliveryDate = DateTime.ParseExact(dtoItem.DeliveryDateFormated, "d", new System.Globalization.CultureInfo("vi-VN")); } else { dtoItem.DeliveryDate = null; } if (!string.IsNullOrEmpty(dtoItem.DeliveryDateInternalFormated)) { dtoItem.DeliveryDateInternal = DateTime.ParseExact(dtoItem.DeliveryDateInternalFormated, "d", new System.Globalization.CultureInfo("vi-VN")); } else { dtoItem.DeliveryDateInternal = null; } if (!string.IsNullOrEmpty(dtoItem.PIReceivedDateFormated)) { dtoItem.PIReceivedDate = DateTime.ParseExact(dtoItem.PIReceivedDateFormated, "d", new System.Globalization.CultureInfo("vi-VN")); } else { dtoItem.PIReceivedDate = null; } if (!string.IsNullOrEmpty(dtoItem.paymentDateFormated)) { dtoItem.PaymentDate = DateTime.ParseExact(dtoItem.paymentDateFormated, "d", new System.Globalization.CultureInfo("vi-VN")); } else { dtoItem.PaymentDate = null; } AutoMapper.Mapper.Map <DTO.SaleOrder, SaleOrder>(dtoItem, dbItem); }
public DTO.SaleOrder DB2DTO_SaleOrder(SaleOrderMng_SaleOrder_View dbItem) { DTO.SaleOrder dtoItem = AutoMapper.Mapper.Map <SaleOrderMng_SaleOrder_View, DTO.SaleOrder>(dbItem); /* * FORMAT FIELDS DATETIME */ if (dbItem.ConcurrencyFlag != null) { dtoItem.ConcurrencyFlag_String = Convert.ToBase64String(dbItem.ConcurrencyFlag); } if (dbItem.InvoiceDate.HasValue) { dtoItem.InvoiceDateFormated = dbItem.InvoiceDate.Value.ToString("dd/MM/yyyy"); } if (dbItem.PIReceivedDate.HasValue) { dtoItem.PIReceivedDateFormated = dbItem.PIReceivedDate.Value.ToString("dd/MM/yyyy"); } if (dbItem.DeliveryDate.HasValue) { dtoItem.DeliveryDateFormated = dbItem.DeliveryDate.Value.ToString("dd/MM/yyyy"); } if (dbItem.DeliveryDateInternal.HasValue) { dtoItem.DeliveryDateInternalFormated = dbItem.DeliveryDateInternal.Value.ToString("dd/MM/yyyy"); } if (dbItem.LDS.HasValue) { dtoItem.LDSFormated = dbItem.LDS.Value.ToString("dd/MM/yyyy"); } if (dbItem.CreatedDate.HasValue) { dtoItem.CreatedDateFormated = dbItem.CreatedDate.Value.ToString("dd/MM/yyyy"); } if (dbItem.UpdatedDate.HasValue) { dtoItem.UpdatedDateFormated = dbItem.UpdatedDate.Value.ToString("dd/MM/yyyy"); } if (dbItem.PaymentDate.HasValue) { dtoItem.paymentDateFormated = dbItem.PaymentDate.Value.ToString("dd/MM/yyyy"); } if (dbItem.IsDPReceived == true) { dbItem.IsDPReceived = dbItem.IsDPReceived.Value == true; } else { dbItem.IsDPReceived = dbItem.IsDPReceived.Value == false; } return(dtoItem); }
public DTO.DataContainer GetDataContainer(int id, int offerID, string orderType, out Library.DTO.Notification notification) { notification = new Library.DTO.Notification() { Type = Library.DTO.NotificationType.Success }; Support.DAL.DataFactory support_factory = new Support.DAL.DataFactory(); try { using (SaleOrderMngEntities context = CreateContext()) { DTO.DataContainer dtoItem = new DTO.DataContainer(); if (id > 0) { SaleOrderMng_SaleOrder_View dbItem; dbItem = context.SaleOrderMng_SaleOrder_View .Include("SaleOrderMng_SaleOrderDetail_View.SaleOrderMng_SaleOrderDetailExtend_View") .Include("SaleOrderMng_SaleOrderExtend_View") .Include("SaleOrderMng_SaleOrderDetailSparepart_View") .Include("SaleOrderMng_SaleOrderProductReturn_View") .Include("SaleOrderMng_SaleOrderSparepartReturn_View") .Include("SaleOrderMng_WarehouseImport_View") .FirstOrDefault(o => o.SaleOrderID == id); DTO.SaleOrder SaleOrderDTOItem = converter.DB2DTO_SaleOrder(dbItem); dtoItem.SaleOrderData = SaleOrderDTOItem; } else { SaleOrderMng_Offer_View dbOffer = context.SaleOrderMng_Offer_View //.Include("SaleOrderMng_OfferLine_View") //.Include("SaleOrderMng_OfferLineSparepart_View") .FirstOrDefault(o => o.OfferID == offerID); // remove in-approrpiated items if (!String.IsNullOrEmpty(orderType) && (orderType == "WAREHOUSE" || orderType == "FACTORY")) { if (orderType == "WAREHOUSE") { // remove factory item dbOffer.SaleOrderMng_OTC_View.Where(o => o.OfferSeasonTypeID == 2 || o.OfferSeasonTypeID == 3).ToList().ForEach(o => dbOffer.SaleOrderMng_OTC_View.Remove(o)); //dbOffer.SaleOrderMng_OTCSparepart_View.Where(o => o.OfferSeasonTypeID == 4 || o.OfferSeasonTypeID == 5).ToList().ForEach(o => dbOffer.SaleOrderMng_OTCSparepart_View.Remove(o)); } else { //remove warehouse item dbOffer.SaleOrderMng_OTC_View.Where(o => o.OfferSeasonTypeID == 1 || o.OfferSeasonTypeID == null).ToList().ForEach(o => dbOffer.SaleOrderMng_OTC_View.Remove(o)); dbOffer.SaleOrderMng_OTCSparepart_View.Where(o => o.OfferSeasonTypeID == 1 || o.OfferSeasonTypeID == null).ToList().ForEach(o => dbOffer.SaleOrderMng_OTCSparepart_View.Remove(o)); } } else { dbOffer.SaleOrderMng_OTC_View.Clear(); dbOffer.SaleOrderMng_OTCSparepart_View.Clear(); orderType = null; } dbOffer.SaleOrderMng_OTC_View.Where(o => !o.Quantity.HasValue || o.Quantity == 0).ToList().ForEach(o => dbOffer.SaleOrderMng_OTC_View.Remove(o)); dbOffer.SaleOrderMng_OTCSparepart_View.Where(o => !o.Quantity.HasValue || o.Quantity == 0).ToList().ForEach(o => dbOffer.SaleOrderMng_OTCSparepart_View.Remove(o)); dtoItem.SaleOrderData = new DTO.SaleOrder(); dtoItem.SaleOrderData.SaleOrderExtends = new List <DTO.SaleOrderExtend>(); dtoItem.SaleOrderData.SaleOrderDetails = new List <DTO.SaleOrderDetail>(); dtoItem.SaleOrderData.SaleOrderDetailSpareparts = new List <DTO.SaleOrderDetailSparepart>(); dtoItem.SaleOrderData.SaleOrderProductReturns = new List <DTO.SaleOrderProductReturn>(); dtoItem.SaleOrderData.SaleOrderSparepartReturns = new List <DTO.SaleOrderSparepartReturn>(); //SET INIT VALUE dtoItem.SaleOrderData.OfferID = offerID; dtoItem.SaleOrderData.OfferUD = dbOffer.OfferUD; dtoItem.SaleOrderData.Season = dbOffer.Season; dtoItem.SaleOrderData.TrackingStatusNM = Library.Helper.TEXT_STATUS_CREATED; dtoItem.SaleOrderData.PaymentTermID = dbOffer.PaymentTermID; dtoItem.SaleOrderData.DeliveryTermID = dbOffer.DeliveryTermID; dtoItem.SaleOrderData.PaymentTypeNM = dbOffer.PaymentTypeNM; dtoItem.SaleOrderData.DeliveryTypeNM = dbOffer.DeliveryTypeNM; //dtoItem.SaleOrderData.Season = Library.Helper.GetCurrentSeason(); dtoItem.SaleOrderData.Conditions = "ALL PRICES INCLUDE 2% DAMAGE RISK"; dtoItem.SaleOrderData.Currency = dbOffer.Currency; dtoItem.SaleOrderData.VATPercent = dbOffer.VAT; dtoItem.SaleOrderData.IsViewDeliveryDateOnPrintout = true; dtoItem.SaleOrderData.IsViewLDSOnPrintout = true; dtoItem.SaleOrderData.IsViewQuantityContOnPrintout = true; dtoItem.SaleOrderData.OrderType = orderType; int i = -1; foreach (SaleOrderMng_OTC_View lineItem in dbOffer.SaleOrderMng_OTC_View.OrderBy(o => o.RowIndex)) { DTO.SaleOrderDetail dtoDetail = new DTO.SaleOrderDetail(); dtoDetail.SaleOrderDetailID = i; dtoDetail.OfferLineID = lineItem.OfferLineID; dtoDetail.ArticleCode = lineItem.ArticleCode; dtoDetail.Description = lineItem.Description; //dtoDetail.OrderQnt = lineItem.Quantity; dtoDetail.UnitPrice = lineItem.FinalPrice; dtoDetail.ProductID = lineItem.ProductID; dtoDetail.Quantity = lineItem.Quantity; //offer quantity dtoDetail.PhysicalQnt = lineItem.PhysicalQnt; dtoDetail.OnSeaQnt = lineItem.OnSeaQnt; dtoDetail.TobeShippedQnt = lineItem.TobeShippedQnt; dtoDetail.ReservationQnt = lineItem.ReservationQnt; dtoDetail.FTSQnt = lineItem.FTSQnt; dtoDetail.ProductStatusID = 1; dtoDetail.ClientArticleCode = lineItem.ClientArticleCode; dtoDetail.ClientArticleName = lineItem.ClientArticleName; dtoDetail.ClientOrderNumber = lineItem.ClientOrderNumber; dtoDetail.ClientEANCode = lineItem.ClientEANCode; // themy dtoDetail.OfferItemTypeID = lineItem.OfferItemTypeID; dtoDetail.OfferItemTypeNM = lineItem.OfferItemTypeNM; dtoDetail.ApproverName = lineItem.ApproverName; dtoDetail.ApprovedDate = lineItem.ApprovedDate.HasValue ? lineItem.ApprovedDate.Value.ToString("dd/MM/yyyy HH:mm") : null; dtoDetail.PlaningPurchasingPrice = lineItem.PlaningPurchasingPrice; dtoDetail.PlaningPurchasingPriceFactoryID = lineItem.PlaningPurchasingPriceFactoryID; dtoDetail.PlaningPurchasingPriceSourceID = lineItem.PlaningPurchasingPriceSourceID; dtoDetail.IsPlaningPurchasingPriceSelected = lineItem.IsPlaningPurchasingPriceSelected; dtoDetail.PlaningPurchasingPriceSelectedBy = lineItem.PlaningPurchasingPriceSelectedBy; dtoDetail.PlaningPurchasingPriceSelectedDate = lineItem.PlaningPurchasingPriceSelectedDate.HasValue ? lineItem.PlaningPurchasingPriceSelectedDate.Value.ToString("dd/MM/yyyy HH:mm") : null; dtoDetail.PlaningPurchasingPriceSourceNM = lineItem.PlaningPurchasingPriceSourceNM; dtoDetail.PlanningPriceSelectorName = lineItem.PlanningPriceSelectorName; dtoDetail.UnitPrice = lineItem.OfferSalePrice; dtoDetail.SaleOrderDetailExtends = new List <DTO.SaleOrderDetailExtend>(); dtoItem.SaleOrderData.SaleOrderDetails.Add(dtoDetail); i = i - 1; } i = -1; foreach (var item in dbOffer.SaleOrderMng_OTCSparepart_View.OrderBy(o => o.RowIndex)) { DTO.SaleOrderDetailSparepart dtoSparepart = new DTO.SaleOrderDetailSparepart(); dtoSparepart.SaleOrderDetailSparepartID = i; dtoSparepart.OfferLineSparepartID = item.OfferLineSparepartID; dtoSparepart.ArticleCode = item.ArticleCode; dtoSparepart.Description = item.Description; //dtoSparepart.OrderQnt = item.Quantity; dtoSparepart.UnitPrice = item.UnitPrice; dtoSparepart.ProductStatusID = 1; dtoSparepart.ClientArticleCode = item.ClientArticleCode; dtoSparepart.ClientArticleName = item.ClientArticleName; dtoSparepart.ClientEANCode = item.ClientEANCode; dtoItem.SaleOrderData.SaleOrderDetailSpareparts.Add(dtoSparepart); i = i - 1; } } //get support data dtoItem.DeliveryTerms = support_factory.GetDeliveryTerm().ToList(); dtoItem.PaymentTerms = support_factory.GetPaymentTerm().ToList(); dtoItem.Seasons = support_factory.GetSeason().ToList(); dtoItem.OrderTypes = GetOrderType().ToList(); dtoItem.ProductStatuses = GetProductStatus().ToList(); dtoItem.CostTypes = GetCostTypes().ToList(); dtoItem.PaymentStatuses = GetPaymentStatus().ToList(); dtoItem.VATPercents = GetVATPercent().ToList(); dtoItem.ReportTemplates = support_factory.GetReportTemplate().ToList(); // Get defautl report template if (dtoItem.SaleOrderData.DefaultPiReport == null) { var defaultRpt = dtoItem.ReportTemplates.FirstOrDefault(x => x.ReportType == "PI" && x.IsDefault == true).ReportTemplateNM; dtoItem.SaleOrderData.DefaultPiReport = defaultRpt; } return(dtoItem); } } catch (Exception ex) { notification.Type = Library.DTO.NotificationType.Error; notification.Message = ex.Message; if (ex.InnerException != null && !string.IsNullOrEmpty(ex.InnerException.Message)) { notification.DetailMessage.Add(ex.InnerException.Message); } return(new DTO.DataContainer()); } }
public bool Confirm(int saleOrderID, ref object dtoItem, int setStatusBy, bool isConfirmWithoutSigned, out Library.DTO.Notification notification) { notification = new Library.DTO.Notification() { Type = Library.DTO.NotificationType.Success, Message = "PI has been confirmed success" }; DTO.SaleOrder dtoItems = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.SaleOrder>(); try { //SAVE DATA Library.DTO.Notification save_nofication = new Library.DTO.Notification { Type = Library.DTO.NotificationType.Success }; if (!UpdateData(setStatusBy, saleOrderID, ref dtoItem, out save_nofication)) { notification = save_nofication; return(false); } //VALIDATE && CONFIRM using (SaleOrderMngEntities context = CreateContext()) { SaleOrder dbSaleOrder = context.SaleOrder.Where(o => o.SaleOrderID == saleOrderID).FirstOrDefault(); OfferStatus dbOfferStatus = context.OfferStatus.Where(o => o.OfferID == dbSaleOrder.OfferID && o.IsCurrentStatus == true).FirstOrDefault(); if (dbOfferStatus.TrackingStatusID != Library.Helper.CONFIRMED && dbOfferStatus.TrackingStatusID != Library.Helper.REVISION_CONFIRMED) { notification = new Library.DTO.Notification() { Message = "Offer must be in CONFIRMED status before confirm PI", Type = Library.DTO.NotificationType.Warning }; return(false); } else if (isConfirmWithoutSigned) { if (string.IsNullOrEmpty(dbSaleOrder.PIReceivedRemark)) { notification = new Library.DTO.Notification() { Message = "PI must be filled-in [Signed PI Remark] before confirm", Type = Library.DTO.NotificationType.Warning }; return(false); } } else { if (dbSaleOrder.IsPIReceived == null || dbSaleOrder.IsPIReceived == false) { notification = new Library.DTO.Notification() { Message = "PI must be check [Signed PI Received] before confirm", Type = Library.DTO.NotificationType.Warning }; return(false); } } SaleOrderStatus dbSaleOrderStatus = context.SaleOrderStatus.Where(o => o.SaleOrderID == saleOrderID && o.IsCurrentStatus == true).FirstOrDefault(); if (dbSaleOrderStatus.TrackingStatusID != Library.Helper.REVISED && dbSaleOrderStatus.TrackingStatusID != Library.Helper.CREATED) { notification = new Library.DTO.Notification() { Message = "PI must be in REVISED/CREATED status before confirm", Type = Library.DTO.NotificationType.Warning }; return(false); } //set tracking status int TrackingStatusID = (dbSaleOrderStatus.TrackingStatusID == Library.Helper.CREATED ? Library.Helper.CONFIRMED : Library.Helper.REVISION_CONFIRMED); SetPIStatus(saleOrderID, TrackingStatusID, setStatusBy); //frozend PI printout data context.SaleOrderMng_function_FrozenSaleOrderPrintoutData(saleOrderID); //get back data dtoItems.TrackingStatusNM = (dbSaleOrderStatus.TrackingStatusID == Library.Helper.CREATED ? Library.Helper.TEXT_STATUS_CONFIRMED : Library.Helper.TEXT_STATUS_REVISION_CONFIRMED); dtoItems.TrackingStatusID = TrackingStatusID; //// add item to quotation if needed //context.FW_Quotation_function_AddFactoryOrderItem(null, saleOrderID, null); // table lockx and also check if item is available on sql server side return(true); } } catch (Exception ex) { notification.Type = Library.DTO.NotificationType.Error; notification.Message = ex.Message; if (ex.InnerException != null && !string.IsNullOrEmpty(ex.InnerException.Message)) { notification.DetailMessage.Add(ex.InnerException.Message); } return(false); } }
public override bool UpdateData(int userId, int id, ref object dtoItem, out Notification notification) { notification = new Notification(); notification.Type = NotificationType.Success; DTO.SaleOrder dtoItems = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.SaleOrder>(); try { using (SaleOrderMngEntities context = CreateContext()) { SaleOrder dbItem = null; SaleOrderStatus dbStatus = null; if (id == 0) { if (!dtoItems.OfferID.HasValue) { throw new Exception("Invalid offer!"); } //else //{ // int offerID = dtoItem.OfferID.Value; // var dbOffer = context.SaleOrderMng_ApprovedOffer_View.FirstOrDefault(o => o.OfferID == offerID); // if (dbOffer == null) // { // throw new Exception("Offer has not been approved! Please contact your manager"); // } //} dbItem = new SaleOrder(); context.SaleOrder.Add(dbItem); //SET PI STATUS dbStatus = new SaleOrderStatus(); dbStatus.TrackingStatusID = Library.Helper.CREATED; dbStatus.StatusDate = DateTime.Now; dbStatus.UpdatedBy = userId; dbStatus.IsCurrentStatus = true; dbItem.SaleOrderStatus.Add(dbStatus); //SET PI No dtoItems.ProformaInvoiceNo = context.SaleOrderMng_function_GeneratePINo(dtoItems.UpdatedBy, dtoItems.OfferID).FirstOrDefault(); //SET TRACKING INFO dtoItems.CreatedBy = userId; dtoItems.CreatedDate = DateTime.Now; } else { dbItem = context.SaleOrder.FirstOrDefault(o => o.SaleOrderID == id); } if (dbItem == null) { notification.Message = "PI not found!"; return(false); } else { // check concurrency if (dbItem.ConcurrencyFlag != null && !dbItem.ConcurrencyFlag.SequenceEqual(Convert.FromBase64String(dtoItems.ConcurrencyFlag_String))) { throw new Exception(Library.Helper.TEXT_CONCURRENCY_CONFLICT); } if (id == 0) { int?offerTrackingStatusID = GetOfferTrackingStatus(dtoItems.OfferID, out notification); if (!(offerTrackingStatusID == 3 || offerTrackingStatusID == 5)) { throw new Exception("Offer should be confirmed before create new PI"); } } // check who update payment field string oldPaymentDate = (dbItem.PaymentDate == null ? "" : dbItem.PaymentDate.Value.ToString("dd/MM/yyyy")); string newPaymentDate = (dtoItems.paymentDateFormated == null ? "" : dtoItems.paymentDateFormated); if (dtoItems.PaymentStatusID != dbItem.PaymentStatusID || dtoItems.PaymentRemark != dbItem.PaymentRemark || newPaymentDate != oldPaymentDate) { dbItem.PaymentUpdatedBy = userId; dbItem.PaymentUpdatedDate = DateTime.Now; } //check invoice data in season 2015/2016 DateTime?startDate = new DateTime(Convert.ToInt32(dtoItems.Season.Substring(0, 4)), 10, 1); DateTime?endDate = new DateTime(Convert.ToInt32(dtoItems.Season.Substring(5, 4)), 9, 30); DateTime?invoiceDate = dtoItems.InvoiceDateFormated.ConvertStringToDateTime(); if (invoiceDate < startDate || invoiceDate > endDate) { throw new Exception("Invoice Date must be between " + startDate.Value.ToString("dd/MM/yyyy") + " and " + endDate.Value.ToString("dd/MM/yyyy") + " because the season is " + dtoItems.Season); } //read dto to db converter.DTO2DB_SaleOrder(dtoItems, ref dbItem); dbItem.UpdatedBy = userId; dbItem.UpdatedDate = DateTime.Now; //remove orphan item context.SaleOrderDetailExtend.Local.Where(o => o.SaleOrderDetail == null).ToList().ForEach(o => context.SaleOrderDetailExtend.Remove(o)); context.SaleOrderDetail.Local.Where(o => o.SaleOrder == null).ToList().ForEach(o => context.SaleOrderDetail.Remove(o)); context.SaleOrderExtend.Local.Where(o => o.SaleOrder == null).ToList().ForEach(o => context.SaleOrderExtend.Remove(o)); context.SaleOrderDetailSparepart.Local.Where(o => o.SaleOrder == null).ToList().ForEach(o => context.SaleOrderDetailSparepart.Remove(o)); //save data context.SaveChanges(); //// add item to quotation if needed //context.FW_Quotation_function_AddFactoryOrderItem(null, dbItem.SaleOrderID, null); // table lockx and also check if item is available on sql server side int OfferID = Convert.ToInt32(dbItem.OfferID); //reload data dtoItem = GetDataContainer(dbItem.SaleOrderID, OfferID, dbItem.OrderType, out notification); //if (id > 0) //{ // dtoItem = new DTO.SaleOrder { SaleOrderID = id }; //} //else //{ // dtoItem = new DTO.SaleOrder { SaleOrderID = dbItem.SaleOrderID }; //} //create reservation //if (dtoItem.OrderType == "WAREHOUSE") //{ // context.SaleOrderMng_function_CreateReservation(dtoItem.SaleOrderID, dtoItem.UpdatedBy); //} return(true); } } } catch (Exception ex) { notification.Type = Library.DTO.NotificationType.Error; notification.Message = Library.Helper.HandleExceptionSingleLine(ex); return(false); } }
/// <summary> /// Hien thoi khong su dung ham nay (entities dang bi loi, sau nay se bo) /// </summary> /// <param name="dtoItem"></param> /// <param name="notification"></param> /// <returns></returns> public bool CreateReturnData(object dtoItems, out Library.DTO.Notification notification) { DTO.SaleOrder dtoItem = ((Newtonsoft.Json.Linq.JObject)dtoItems).ToObject <DTO.SaleOrder>(); notification = new Library.DTO.Notification() { Type = Library.DTO.NotificationType.Success, Message = "You have been returned goods success" }; if (dtoItem.SaleOrderID <= 0) { throw new Exception("You need save PI before return data"); } try { using (SaleOrderReturnEntities context = CreateContext()) { //check quantity return that user entered foreach (var item in dtoItem.SaleOrderProductReturns.Where(o => o.SaleOrderProductReturnID < 0)) { var dbRemain = context.SaleOrderMng_LoadingPlanDetail_View.Where(o => o.LoadingPlanDetailID == item.LoadingPlanDetailID).FirstOrDefault(); if (dbRemain != null && item.OrderQnt > dbRemain.RemaingReturnQnt) { throw new Exception("Quantity of product: " + item.ArticleCode + "(" + item.Description + ") must be less than quantity of return remaining"); } } foreach (var item in dtoItem.SaleOrderSparepartReturns.Where(o => o.SaleOrderSparepartReturnID < 0)) { var dbRemain = context.SaleOrderMng_LoadingPlanSparepartDetail_View.Where(o => o.LoadingPlanSparepartDetailID == item.LoadingPlanSparepartDetailID).FirstOrDefault(); if (dbRemain != null && item.OrderQnt > dbRemain.RemaingReturnQnt) { throw new Exception("Quantity of product: " + item.ArticleCode + "(" + item.Description + ") must be less than quantity of return remaining"); } } //get reuturn index int?returnIdex = 1; int?returnIdexSparepart = 1; if (dtoItem.SaleOrderProductReturns.Where(o => o.SaleOrderProductReturnID > 0).Count() > 0) { returnIdex = dtoItem.SaleOrderProductReturns.OrderByDescending(o => o.ReturnIndex).FirstOrDefault().ReturnIndex + 1; } if (dtoItem.SaleOrderSparepartReturns.Where(o => o.SaleOrderSparepartReturnID > 0).Count() > 0) { returnIdexSparepart = dtoItem.SaleOrderSparepartReturns.OrderByDescending(o => o.ReturnIndex).FirstOrDefault().ReturnIndex + 1; } //create offer and fobwarehouse saleorder to prepare to import data to warehouse Offer_Return dbOffer = new Offer_Return(); dbOffer.ClientID = 70560; //EUROFAR dbOffer.SaleID = 23; //IRON dbOffer.Season = dtoItem.Season; dbOffer.OfferVersion = 1; dbOffer.Currency = dtoItem.Currency; dbOffer.OfferUD = context.OfferMng_function_GenerateOfferCode(null, dbOffer.Season, dbOffer.SaleID, dbOffer.ClientID).FirstOrDefault(); OfferStatus_Return dbOfferStatus = new OfferStatus_Return(); dbOfferStatus.TrackingStatusID = Library.Helper.CREATED; dbOfferStatus.StatusDate = DateTime.Now; dbOfferStatus.UpdatedBy = dtoItem.UpdatedBy; dbOfferStatus.IsCurrentStatus = true; dbOffer.OfferStatus.Add(dbOfferStatus); SaleOrder_Return dbSaleOrder = new SaleOrder_Return(); dbSaleOrder.Season = dtoItem.Season; dbSaleOrder.InvoiceDate = DateTime.Now; dbSaleOrder.OrderType = "FOB_WAREHOUSE"; dbSaleOrder.ProformaInvoiceNo = context.SaleOrderMng_function_GeneratePINo(371, dtoItem.UpdatedBy).FirstOrDefault(); dbSaleOrder.CreatedBy = dtoItem.UpdatedBy; dbSaleOrder.CreatedDate = DateTime.Now; dbSaleOrder.OriginSaleOrderID = dtoItem.SaleOrderID; dbOffer.SaleOrder.Add(dbSaleOrder); SaleOrderStatus_Return dbSaleOrderStatus = new SaleOrderStatus_Return(); dbSaleOrderStatus.TrackingStatusID = Library.Helper.CREATED; dbSaleOrderStatus.StatusDate = DateTime.Now; dbSaleOrderStatus.UpdatedBy = dtoItem.UpdatedBy; dbSaleOrderStatus.IsCurrentStatus = true; dbSaleOrder.SaleOrderStatus.Add(dbSaleOrderStatus); WarehouseImport dbWarehouseImport = new WarehouseImport(); dbWarehouseImport.ReceiptNo = context.SaleOrderMng_funtions_GenerateWarehouseImportReceiptNo(dtoItem.Season).FirstOrDefault(); dbWarehouseImport.ImportedDate = DateTime.Now; dbWarehouseImport.IsConfirmed = true; dbWarehouseImport.UpdatedBy = dtoItem.UpdatedBy; dbWarehouseImport.UpdatedDate = DateTime.Now; dbWarehouseImport.ConfirmedBy = dtoItem.UpdatedBy; dbWarehouseImport.ConfirmedDate = DateTime.Now; dbWarehouseImport.ImportTypeID = 2; dbWarehouseImport.Season = dtoItem.Season; //create offerline var selected_products = from p in dtoItem.SaleOrderProductReturns.Where(o => o.SaleOrderProductReturnID < 0) group p by new { p.ProductID, p.ArticleCode, p.ModelID, p.MaterialID, p.MaterialTypeID, p.MaterialColorID, p.FrameMaterialID, p.FrameMaterialColorID, p.SubMaterialID, p.SubMaterialColorID, p.SeatCushionID, p.BackCushionID, p.CushionColorID, p.FSCTypeID, p.FSCPercentID } into g select new { g.Key.ProductID, g.Key.ArticleCode, g.Key.ModelID, g.Key.MaterialID, g.Key.MaterialTypeID, g.Key.MaterialColorID, g.Key.FrameMaterialID, g.Key.FrameMaterialColorID, g.Key.SubMaterialID, g.Key.SubMaterialColorID, g.Key.SeatCushionID, g.Key.BackCushionID, g.Key.CushionColorID, g.Key.FSCTypeID, g.Key.FSCPercentID, TotalQnt = g.Sum(x => x.OrderQnt) }; OfferLine_Return dbOfferLine = new OfferLine_Return(); SaleOrderDetail_Return dbSaleOrderDetail = new SaleOrderDetail_Return(); SaleOrderProductReturn dbProductReturn = new SaleOrderProductReturn(); WarehouseImportProductDetail dbWarehouseImportProduct = new WarehouseImportProductDetail(); foreach (var item in selected_products) { dbOfferLine = new OfferLine_Return(); dbOfferLine.ArticleCode = item.ArticleCode; dbOfferLine.Description = dtoItem.SaleOrderProductReturns.Where(o => o.ProductID == item.ProductID).FirstOrDefault().Description; dbOfferLine.ModelID = item.ModelID; dbOfferLine.MaterialID = item.MaterialID; dbOfferLine.MaterialTypeID = item.MaterialTypeID; dbOfferLine.MaterialColorID = item.MaterialColorID; dbOfferLine.FrameMaterialID = item.FrameMaterialID; dbOfferLine.FrameMaterialColorID = item.FrameMaterialColorID; dbOfferLine.SubMaterialID = item.SubMaterialID; dbOfferLine.SubMaterialColorID = item.SubMaterialColorID; dbOfferLine.SeatCushionID = item.SeatCushionID; dbOfferLine.BackCushionID = item.BackCushionID; dbOfferLine.CushionColorID = item.CushionColorID; dbOfferLine.FSCTypeID = item.FSCTypeID; dbOfferLine.FSCPercentID = item.FSCPercentID; dbOfferLine.Quantity = item.TotalQnt; dbOffer.OfferLine.Add(dbOfferLine); //create saleOrderDetail dbSaleOrderDetail = new SaleOrderDetail_Return(); dbSaleOrderDetail.OrderQnt = item.TotalQnt; dbSaleOrderDetail.ProductStatusID = 1; dbOfferLine.SaleOrderDetail.Add(dbSaleOrderDetail); dbSaleOrder.SaleOrderDetail.Add(dbSaleOrderDetail); //create saleorder product return foreach (var item_return in dtoItem.SaleOrderProductReturns.Where(o => o.SaleOrderProductReturnID < 0 && o.ProductID == item.ProductID)) { dbProductReturn = new SaleOrderProductReturn(); dbProductReturn.LoadingPlanDetailID = item_return.LoadingPlanDetailID; dbProductReturn.OrderQnt = item_return.OrderQnt; dbProductReturn.ReturnIndex = returnIdex; dbProductReturn.CreatedDate = DateTime.Now; dbSaleOrderDetail.SaleOrderProductReturn.Add(dbProductReturn); } //create fob warehouse import var loadingplans = from p in dtoItem.SaleOrderProductReturns.Where(o => o.SaleOrderProductReturnID < 0 && o.ProductID == item.ProductID) group p by new { p.ProductID, p.LoadingPlanID } into g select new { g.Key.ProductID, g.Key.LoadingPlanID, TotalQnt = g.Sum(x => x.OrderQnt) }; foreach (var item_loadingplan in loadingplans) { dbWarehouseImportProduct = new WarehouseImportProductDetail(); dbWarehouseImportProduct.ProductID = item_loadingplan.ProductID; dbWarehouseImportProduct.Quantity = item_loadingplan.TotalQnt; dbWarehouseImportProduct.ProductStatusID = 1; //dbWarehouseImportProduct.LoadingPlanID = item_loadingplan.LoadingPlanID; dbWarehouseImportProduct.WarehouseImport = dbWarehouseImport; //dbSaleOrderDetail.WarehouseImportProductDetail.Add(dbWarehouseImportProduct); } } //create offerlinesparepart var selected_spareparts = from s in dtoItem.SaleOrderSparepartReturns.Where(o => o.SaleOrderSparepartReturnID < 0) group s by new { s.SparepartID, s.ArticleCode, s.ModelID, s.PartID } into g select new { g.Key.SparepartID, g.Key.ArticleCode, g.Key.ModelID, g.Key.PartID, TotalQnt = g.Sum(o => o.OrderQnt) }; OfferLineSparepart_Return dbOfferLineSparepart = new OfferLineSparepart_Return(); SaleOrderDetailSparepart_Return dbSaleOrderDetailSparepart = new SaleOrderDetailSparepart_Return(); SaleOrderSparepartReturn dbSparepartReturn = new SaleOrderSparepartReturn(); WarehouseImportSparepartDetail dbWarehouseImportSparepart = new WarehouseImportSparepartDetail(); foreach (var item in selected_spareparts) { dbOfferLineSparepart = new OfferLineSparepart_Return(); dbOfferLineSparepart.ArticleCode = item.ArticleCode; dbOfferLineSparepart.Description = dtoItem.SaleOrderSparepartReturns.Where(o => o.SparepartID == item.SparepartID).FirstOrDefault().Description; dbOfferLineSparepart.ModelID = item.ModelID; dbOfferLineSparepart.PartID = item.PartID; dbOfferLine.Quantity = item.TotalQnt; dbOffer.OfferLineSparepart.Add(dbOfferLineSparepart); //create SaleOrderDetailSparepart dbSaleOrderDetailSparepart = new SaleOrderDetailSparepart_Return(); dbSaleOrderDetailSparepart.OrderQnt = item.TotalQnt; dbSaleOrderDetailSparepart.ProductStatusID = 1; dbSaleOrderDetailSparepart.SaleOrder = dbSaleOrder; dbOfferLineSparepart.SaleOrderDetailSparepart.Add(dbSaleOrderDetailSparepart); //create sparepart return foreach (var item_return in dtoItem.SaleOrderSparepartReturns.Where(o => o.SaleOrderSparepartReturnID < 0 && o.SparepartID == item.SparepartID)) { dbSparepartReturn = new SaleOrderSparepartReturn(); dbSparepartReturn.LoadingPlanSparepartDetailID = item_return.LoadingPlanSparepartDetailID; dbSparepartReturn.OrderQnt = item_return.OrderQnt; dbSparepartReturn.ReturnIndex = returnIdexSparepart; dbSparepartReturn.CreatedDate = DateTime.Now; dbSaleOrderDetailSparepart.SaleOrderSparepartReturn.Add(dbSparepartReturn); } //create fob warehouse import sparepart var loadingplans = from p in dtoItem.SaleOrderSparepartReturns.Where(o => o.SaleOrderSparepartReturnID < 0 && o.SparepartID == item.SparepartID) group p by new { p.SparepartID, p.LoadingPlanID } into g select new { g.Key.SparepartID, g.Key.LoadingPlanID, TotalQnt = g.Sum(x => x.OrderQnt) }; foreach (var item_loadingplan in loadingplans) { dbWarehouseImportSparepart = new WarehouseImportSparepartDetail(); dbWarehouseImportSparepart.SparepartID = item_loadingplan.SparepartID; dbWarehouseImportSparepart.Quantity = item_loadingplan.TotalQnt; dbWarehouseImportSparepart.ProductStatusID = 1; //dbWarehouseImportSparepart.LoadingPlanID = item_loadingplan.LoadingPlanID; dbWarehouseImportSparepart.WarehouseImport = dbWarehouseImport; //dbSaleOrderDetailSparepart.WarehouseImportSparepartDetail.Add(dbWarehouseImportSparepart); } } //save data context.Offer.Add(dbOffer); context.SaveChanges(); } return(true); } catch (Exception ex) { notification.Type = Library.DTO.NotificationType.Error; notification.Message = ex.Message; if (ex.InnerException != null && !string.IsNullOrEmpty(ex.InnerException.Message)) { notification.DetailMessage.Add(ex.InnerException.Message); } return(false); } }