public void DTO2DB_PurchaseInvoice(DTO.PurchaseInvoiceDTO dtoItem, ref PurchaseInvoice dbItem, int userId) { if (dtoItem.PurchaseInvoiceDetailDTOs != null) { foreach (var item in dbItem.PurchaseInvoiceDetail.ToArray()) { if (!dtoItem.PurchaseInvoiceDetailDTOs.Select(s => s.PurchaseInvoiceDetailID).Contains(item.PurchaseInvoiceDetailID)) { dbItem.PurchaseInvoiceDetail.Remove(item); } } foreach (var item in dtoItem.PurchaseInvoiceDetailDTOs) { PurchaseInvoiceDetail dbDetail = new PurchaseInvoiceDetail(); if (item.PurchaseInvoiceDetailID < 0) { dbItem.PurchaseInvoiceDetail.Add(dbDetail); } else { dbDetail = dbItem.PurchaseInvoiceDetail.Where(s => s.PurchaseInvoiceDetailID == item.PurchaseInvoiceDetailID).FirstOrDefault(); } if (dbDetail != null) { AutoMapper.Mapper.Map <DTO.PurchaseInvoiceDetailDTO, PurchaseInvoiceDetail>(item, dbDetail); } } } AutoMapper.Mapper.Map <DTO.PurchaseInvoiceDTO, PurchaseInvoice>(dtoItem, dbItem); if (!string.IsNullOrEmpty(dtoItem.PurchaseInvoiceDate)) { dbItem.PurchaseInvoiceDate = dtoItem.PurchaseInvoiceDate.ConvertStringToDateTime(); } if (!string.IsNullOrEmpty(dtoItem.PostingDate)) { dbItem.PostingDate = dtoItem.PostingDate.ConvertStringToDateTime(); } if (dbItem.PurchaseInvoiceID > 0) { dbItem.UpdatedBy = userId; dbItem.UpdatedDate = DateTime.Now; } else { dbItem.CreatedBy = userId; dbItem.CreatedDate = DateTime.Now; } }
public override bool Approve(int userId, int id, ref object dtoItem, out Notification notification) { DTO.PurchaseInvoiceDTO dtoPurchaseInvoice = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.PurchaseInvoiceDTO>(); notification = new Notification(); notification.Type = NotificationType.Success; try { using (var context = CreateContext()) { var dbItem = context.PurchaseInvoice.FirstOrDefault(o => o.PurchaseInvoiceID == id); if (dbItem == null) { notification.Type = NotificationType.Error; notification.Message = "Can not find data!"; return(false); } var checkConfirm = false; var itemName = ""; if (dtoPurchaseInvoice.PurchaseInvoiceTypeID == 1) { decimal?remain = 0; decimal?total = 0; for (int i = 0; i < dtoPurchaseInvoice.PurchaseInvoiceDetailDTOs.Count; i++) { remain = dtoPurchaseInvoice.PurchaseInvoiceDetailDTOs[i].POReceivedQnt; total = total + dtoPurchaseInvoice.PurchaseInvoiceDetailDTOs[i].Quantity; if ((i + 1) >= dtoPurchaseInvoice.PurchaseInvoiceDetailDTOs.Count || dtoPurchaseInvoice.PurchaseInvoiceDetailDTOs[i + 1].PurchaseOrderID != dtoPurchaseInvoice.PurchaseInvoiceDetailDTOs[i].PurchaseOrderID || dtoPurchaseInvoice.PurchaseInvoiceDetailDTOs[i + 1].ProductionItemID != dtoPurchaseInvoice.PurchaseInvoiceDetailDTOs[i].ProductionItemID) { if (total > remain) { checkConfirm = true; itemName = dtoPurchaseInvoice.PurchaseInvoiceDetailDTOs[i].ProductionItemNM; break; } else { remain = 0; total = 0; } } } } if (checkConfirm) { throw new Exception(itemName + " has Quantity larger than ReceivedQnt, Can not confirm!"); } else { dbItem.PurchaseInvoiceStatusID = 2; dbItem.SetStatusBy = userId; dbItem.SetStatusDate = DateTime.Now; context.SaveChanges(); } // Auto update unit price in receiving note dtoItem = GetData(userId, dbItem.PurchaseInvoiceID, null, out notification).Data; } } catch (Exception ex) { notification.Type = NotificationType.Error; notification.Message = ex.Message; return(false); } return(true); }
//Status public int SetPurchaseInvoiceStatus(int userId, int purchaseInvoiceID, int purchaseInvoiceStatusID, out Library.DTO.Notification notification) { notification = new Library.DTO.Notification() { Type = Library.DTO.NotificationType.Success }; int?oldPurchaseInvoiceStatusID = null; try { using (PurchaseInvoiceMngEntities context = CreateContext()) { var purchaseInvoiceStatuses = context.SupportMng_PurchaseInvoiceStatus_View.ToList(); var currentPurchaseInvoice = context.PurchaseInvoice.Where(o => o.PurchaseInvoiceID == purchaseInvoiceID).FirstOrDefault(); oldPurchaseInvoiceStatusID = currentPurchaseInvoice.PurchaseInvoiceStatusID; Hashtable input = new Hashtable(); DTO.PurchaseInvoiceDTO dtoItem = GetData(userId, currentPurchaseInvoice.PurchaseInvoiceID, input, out notification).Data; //check valid status int?oldDisplayOrder = purchaseInvoiceStatuses.Where(o => o.PurchaseInvoiceStatusID == oldPurchaseInvoiceStatusID).FirstOrDefault().DisplayOrder; int?newDisplayOrder = purchaseInvoiceStatuses.Where(o => o.PurchaseInvoiceStatusID == purchaseInvoiceStatusID).FirstOrDefault().DisplayOrder; if (newDisplayOrder <= oldDisplayOrder) { string currentStatusName = purchaseInvoiceStatuses.Where(o => o.PurchaseInvoiceStatusID == oldPurchaseInvoiceStatusID).FirstOrDefault().PurchaseInvoiceStatusNM; string newStatusName = purchaseInvoiceStatuses.Where(o => o.PurchaseInvoiceStatusID == purchaseInvoiceStatusID).FirstOrDefault().PurchaseInvoiceStatusNM; throw new Exception("Can not set status from " + currentStatusName + " to " + newStatusName); } else { if (newDisplayOrder == 2) { var checkConfirm = false; var itemName = ""; if (dtoItem.PurchaseInvoiceTypeID == 1) { decimal?remain = 0; decimal?total = 0; for (int i = 0; i < dtoItem.PurchaseInvoiceDetailDTOs.Count; i++) { remain = dtoItem.PurchaseInvoiceDetailDTOs[i].POReceivedQnt; total = total + dtoItem.PurchaseInvoiceDetailDTOs[i].Quantity; if ((i + 1) >= dtoItem.PurchaseInvoiceDetailDTOs.Count || dtoItem.PurchaseInvoiceDetailDTOs[i + 1].PurchaseOrderID != dtoItem.PurchaseInvoiceDetailDTOs[i].PurchaseOrderID || dtoItem.PurchaseInvoiceDetailDTOs[i + 1].ProductionItemID != dtoItem.PurchaseInvoiceDetailDTOs[i].ProductionItemID) { if (total > remain) { checkConfirm = true; itemName = dtoItem.PurchaseInvoiceDetailDTOs[i].ProductionItemNM; break; } else { remain = 0; total = 0; } } } } if (checkConfirm) { throw new Exception(itemName + " has Quantity larger than ReceivedQnt, Can not confirm!"); } else { notification.Message = purchaseInvoiceStatuses.Where(o => o.PurchaseInvoiceStatusID == purchaseInvoiceStatusID).FirstOrDefault().PurchaseInvoiceStatusNM + " success !!!"; currentPurchaseInvoice.PurchaseInvoiceStatusID = purchaseInvoiceStatusID; currentPurchaseInvoice.SetStatusBy = userId; currentPurchaseInvoice.SetStatusDate = DateTime.Now; context.SaveChanges(); } } else { if (newDisplayOrder == 3) { var paymentNoteInvoices = context.PurchaseInvoiceMng_ListPaymentNoteInvoice_View.ToList(); var checkInvoiceNoCancel = false; foreach (var item in paymentNoteInvoices) { if (item.PurchaseInvoiceID == purchaseInvoiceID) { if (item.StatusID != 3) { checkInvoiceNoCancel = true; break; } } } if (checkInvoiceNoCancel == true) { throw new Exception("This Purchasing Invoice exists in Payment Note and The status is not Cancel"); } notification.Message = purchaseInvoiceStatuses.Where(o => o.PurchaseInvoiceStatusID == purchaseInvoiceStatusID).FirstOrDefault().PurchaseInvoiceStatusNM + " success !!!"; currentPurchaseInvoice.PurchaseInvoiceStatusID = purchaseInvoiceStatusID; currentPurchaseInvoice.SetStatusBy = userId; currentPurchaseInvoice.SetStatusDate = DateTime.Now; currentPurchaseInvoice.FinishDate = DateTime.Now; context.SaveChanges(); } else { notification.Message = purchaseInvoiceStatuses.Where(o => o.PurchaseInvoiceStatusID == purchaseInvoiceStatusID).FirstOrDefault().PurchaseInvoiceStatusNM + " success !!!"; currentPurchaseInvoice.PurchaseInvoiceStatusID = purchaseInvoiceStatusID; currentPurchaseInvoice.SetStatusBy = userId; currentPurchaseInvoice.SetStatusDate = DateTime.Now; context.SaveChanges(); } } } return(purchaseInvoiceStatusID); } } catch (Exception ex) { notification.Type = Library.DTO.NotificationType.Error; notification.Message = Library.Helper.GetInnerException(ex).Message; return(oldPurchaseInvoiceStatusID.Value); } }
public override bool UpdateData(int userId, int id, ref object dtoItem, out Notification notification) { notification = new Library.DTO.Notification() { Type = Library.DTO.NotificationType.Success }; DTO.PurchaseInvoiceDTO dtoPurchaseInvoice = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.PurchaseInvoiceDTO>(); try { using (PurchaseInvoiceMngEntities context = CreateContext()) { PurchaseInvoice dbItem = null; if (id == 0) { dbItem = new PurchaseInvoice(); context.PurchaseInvoice.Add(dbItem); } else { dbItem = context.PurchaseInvoice.Where(o => o.PurchaseInvoiceID == id).FirstOrDefault(); } if (dbItem == null) { notification.Message = "data not found!"; return(false); } else { if (!dtoPurchaseInvoice.PurchaseInvoiceTypeID.HasValue) { throw new Exception("Please select type of purchasing invoice"); } //upload file Module.Framework.DAL.DataFactory fwFactory = new Module.Framework.DAL.DataFactory(); string tempFolder = FrameworkSetting.Setting.AbsoluteUserTempFolder + userId.ToString() + @"\"; if (dtoPurchaseInvoice.File_HasChange.HasValue && dtoPurchaseInvoice.File_HasChange.Value) { dtoPurchaseInvoice.AttachedFile = fwFactory.CreateFilePointer(tempFolder, dtoPurchaseInvoice.File_NewFile, dtoPurchaseInvoice.AttachedFile, dtoPurchaseInvoice.FriendlyName); } //convert dto to db converter.DTO2DB_PurchaseInvoice(dtoPurchaseInvoice, ref dbItem, userId); if (id == 0) { dbItem.PurchaseInvoiceStatusID = 1; dbItem.SetStatusBy = userId; dbItem.SetStatusDate = DateTime.Now; } //remove orphan context.PurchaseInvoiceDetail.Local.Where(o => o.PurchaseInvoice == null).ToList().ForEach(o => context.PurchaseInvoiceDetail.Remove(o)); //save data context.SaveChanges(); //generate purchase invoice code if (string.IsNullOrEmpty(dbItem.PurchaseInvoiceUD)) { context.PurchaseInvoiceMng_function_GeneratePurchaseInvoiceUD(dbItem.PurchaseInvoiceID, dbItem.PurchaseInvoiceDate.Value.Year, dbItem.PurchaseInvoiceDate.Value.Month); } //get return data dtoItem = GetData(userId, dbItem.PurchaseInvoiceID, null, out notification).Data; return(true); } } } catch (Exception ex) { notification.Type = Library.DTO.NotificationType.Error; notification.Message = Library.Helper.GetInnerException(ex).Message; return(false); } }