//删除采购单 public void DeletePurchase(PurchaseViewModel model) { var purchase = _purchaseRepository.FindBy(x => x.PurchaseId == model.PurchaseId).Include(z => z.PurchaseApplication.Item).FirstOrDefault(); if (purchase == null) { return; } var deletingPurchaseNumber = purchase.PurchaseNumber; purchase.PurchaseApplication.ProcessStatus = ProcessStatusEnum.申请审核中; purchase.PurchaseApplication.AuditStatus = AuditStatusEnum.未审批; purchase.Status = ProcessStatusEnum.申请审核中; _purchaseRepository.Delete(purchase); _purchaseRepository.Save(); PurchaseHeader purchaseHeader = _purchaseHeaderRepository.GetPurchaseHeader(deletingPurchaseNumber); if (purchaseHeader.Purchases == null || purchaseHeader.Purchases.Count == 0) { _purchaseHeaderRepository.Delete(purchaseHeader); _purchaseHeaderRepository.Save(); } }
private bool ValidateForPosting(ref BillingReceptionModel item, NAVConfigurations _config) { bool isValid = true; try { //Check if exists bool documentAlreadyExist = DBNAV2017Purchases.DocumentExistsFor(_config.NAVDatabaseName, _config.NAVCompanyName, item.Id); if (documentAlreadyExist) { item.eMessage = "Já foi criada uma fatura para a receção selecionada."; isValid = false; } } catch (Exception ex) { item.eMessage = "Não foi possivel validar a existência da fatura. Por favor tente novamente. Se o problema persistir contacte o administrador."; isValid = false; } if (!isValid) { return(isValid); } PurchaseHeader purchOrderInfo = null; if (Convert.ToDateTime(item.DataDocFornecedor) > item.DataModificacao) { item.eMessage = "A data do documento (" + item.DataDocFornecedor + ") é maior que a data do registo (" + (item.DataModificacao.HasValue ? item.DataModificacao.Value.ToString("yyyy-MM-dd") : string.Empty) + ")"; //item.eMessages.Add(new TraceInformation(TraceType.Error, "A data do documento: " + item.DataDocFornecedor + " é maior que a data do registo: " + item.DataModificacao)); isValid = false; } else if (!string.IsNullOrEmpty(item.NumEncomenda)) { purchOrderInfo = DBNAV2017Purchases.GetOrderById(_config.NAVDatabaseName, _config.NAVCompanyName, item.NumEncomenda); if (purchOrderInfo.No != item.NumEncomenda) { item.eMessage = "A encomenda " + item.NumEncomenda + " não existe ou já está registada."; //item.eMessages.Add(new TraceInformation(TraceType.Error, "A encomenda " + item.NumEncomenda + " não existe ou já está registada.")); isValid = false; } } else { if (!string.IsNullOrEmpty(item.NumEncomendaManual)) { purchOrderInfo = DBNAV2017Purchases.GetOrderById(_config.NAVDatabaseName, _config.NAVCompanyName, item.NumEncomendaManual); if (purchOrderInfo.No != item.NumEncomendaManual) { item.eMessage = "A encomenda (Núm. Encomenda Manual) " + item.NumEncomendaManual + " não existe ou já está registada."; //item.eMessages.Add(new TraceInformation(TraceType.Error, "A encomenda (Núm. Encomenda Manual) " + item.NumEncomendaManual + " não existe ou já está registada.")); isValid = false; } } } return(isValid); }
private static List <PurchaseHeader> GetPurchasesBy(string NAVDatabaseName, string NAVCompanyName, NAVBaseDocumentTypes type, string supplierId, string orderId, string externalDocNo) { try { List <PurchaseHeader> result = new List <PurchaseHeader>(); using (var ctx = new SuchDBContextExtention()) { var parameters = new[] { new SqlParameter("@DBName", NAVDatabaseName), new SqlParameter("@CompanyName", NAVCompanyName), new SqlParameter("@Type", (int)type), new SqlParameter("@SupplierId", supplierId), new SqlParameter("@OrderId", orderId), new SqlParameter("@ExternalDocNo", externalDocNo) }; IEnumerable <dynamic> data = ctx.execStoredProcedure("exec NAV2017Encomendas @DBName, @CompanyName, @Type, @SupplierId, @OrderId, @ExternalDocNo", parameters); foreach (dynamic temp in data) { var item = new PurchaseHeader(); item.DocumentType = (int)temp.DocumentType; item.No = temp.No; item.OrderDate = temp.OrderDate is DBNull ? string.Empty : ((DateTime)temp.OrderDate).ToString("yyyy-MM-dd"); item.DueDate = temp.DueDate is DBNull ? string.Empty : ((DateTime)temp.DueDate).ToString("yyyy-MM-dd"); item.LocationCode = temp.LocationCode; item.RegionId = temp.RegionId is DBNull ? string.Empty : temp.RegionId; item.FunctionalAreaId = temp.FunctionalAreaId is DBNull ? string.Empty : temp.FunctionalAreaId; item.RespCenterId = temp.RespCenterId is DBNull ? string.Empty : temp.RespCenterId; item.VendorOrderNo = temp.VendorOrderNo; item.VendorInvoiceNo = temp.VendorInvoiceNo; item.VendorCrMemoNo = temp.VendorCrMemoNo; item.BuyFromVendorNo = temp.BuyFromVendorNo; item.BuyFromVendorName = temp.BuyFromVendorName; item.DocumentDate = temp.DocumentDate is DBNull ? string.Empty : ((DateTime)temp.DocumentDate).ToString("yyyy-MM-dd"); item.DimensionSetID = temp.DimensionSetID; item.RelatedDocument = temp.RelatedDocument; item.ValorFactura = temp.ValorFactura; item.SourceDocNo = temp.SourceDocNo; item.Quantity = temp.Quantity; item.QuantityReceived = temp.QuantityReceived; item.AmountRcdNotInvoiced = temp.AmountRcdNotInvoiced; item.Amount = temp.Amount; item.AmountIncludingVAT = temp.AmountIncludingVAT; result.Add(item); } } return(result); } catch (Exception ex) { return(null); } }
//从采购单入库 public void CreateInStock(IList <PurchaseViewModel> models, string temp_instockNumber) { if (models != null && models.Count > 0) { IList <InStock> listOfInStocks = new List <InStock>(); PurchaseHeader purchaseHeader = _purchaseHeaderRepository.GetPurchaseHeader(models.FirstOrDefault()?.PurchaseNumber); InStockHeader newInStockHeader = _mapper.Map <InStockHeader>(purchaseHeader); int lastSerialNumber = _inStockHeaderRepository.GetLatestSerialNumber(DateTime.Now); newInStockHeader.SerialNo = ++lastSerialNumber; newInStockHeader.InStockNumber = string.IsNullOrEmpty(temp_instockNumber) ? ServiceHelper.GenerateCodeNumber("RK", newInStockHeader.SerialNo) : temp_instockNumber; try { _inStockHeaderRepository.Add(newInStockHeader); foreach (PurchaseViewModel model in models) { InStock newInstock = _mapper.Map <InStock>(model); newInstock.Total = (model.PurchaseTotal - model.AlreadyInStock) >= model.ReadyForInStock ? model.ReadyForInStock : model.PurchaseTotal - model.AlreadyInStock; newInstock.Type = purchaseHeader.RequestCategory; newInstock.InStockNumber = newInStockHeader.InStockNumber; newInstock.Status = ProcessStatusEnum.采购入库; newInstock.PositionName = "Stage"; if (newInstock.Total <= 0) { continue; } listOfInStocks.Add(newInstock); if (newInstock.Total + model.AlreadyInStock == model.PurchaseTotal) { _purchaseService.UpdatePurchaseProcessStatus(model.PurchaseId, ProcessStatusEnum.采购入库); } else { _purchaseService.UpdatePurchaseProcessStatus(model.PurchaseId, ProcessStatusEnum.采购中); } _managementService.UpdateStorage(model.Code, model.Position, newInstock.Total, newInstock.InStockNumber); _managementService.UpdateItemPrice(model.ItemId, model.Price); } if (listOfInStocks.Count > 0) { _inStockRepository.AddRange(listOfInStocks); _inStockHeaderRepository.Save(); _inStockRepository.Save(); } } catch (DbUpdateException) { } } }
public static bool DocumentExistsFor(string NAVDatabaseName, string NAVCompanyName, string billingReceptionNo) { List <PurchaseHeader> result = new List <PurchaseHeader>(); using (var ctx = new SuchDBContextExtention()) { var parameters = new[] { new SqlParameter("@DBName", NAVDatabaseName), new SqlParameter("@CompanyName", NAVCompanyName), new SqlParameter("@BillingReceptionNo", billingReceptionNo) }; IEnumerable <dynamic> data = ctx.execStoredProcedure("exec NAV2017RecFaturacao @DBName, @CompanyName, @BillingReceptionNo", parameters); foreach (dynamic temp in data) { var item = new PurchaseHeader(); item.No = temp.No; result.Add(item); } } return(result.Count > 0); }
//生成采购单 public int CreatePurchase(IList <PurchaseApplicationViewModel> models, string temp_purchaseNumber) { PurchaseHeader newPurchaseHeader = null; IList <Purchase> listOfPurchase = new List <Purchase>(); models = models.Where(x => x.TotalConfirmed > 0).ToList(); if (models.Count != 0) { try { foreach (var item in models) { var existingPurchase = _purchaseRepository.FindBy(x => x.PurchaseApplicationId == item.PurchaseApplicationId && x.IsDeleted && item.SupplierName == x.PurchaseHeader.SupplierId).FirstOrDefault(); // 重新修改之前的采购单 if (existingPurchase != null) { existingPurchase.PurchaseTotal = item.TotalConfirmed; existingPurchase.IsDeleted = false; switch (item.RequestCategory) { case RequestCategoriesEnum.材料需求: existingPurchase.Status = ProcessStatusEnum.采购中; break; case RequestCategoriesEnum.采购退货: existingPurchase.Status = ProcessStatusEnum.退货中; break; } existingPurchase.UpdateDate = DateTime.Now; _purchaseRepository.Save(); switch (item.RequestCategory) { case RequestCategoriesEnum.材料需求: UpdatePurchaseApplicationProcessStatus(item.PurchaseApplicationId, ProcessStatusEnum.采购中); break; case RequestCategoriesEnum.采购退货: UpdatePurchaseApplicationProcessStatus(item.PurchaseApplicationId, ProcessStatusEnum.退货中); break; } return(1); } else { var purchaseApplicationHeader = _purchaseApplicationHeaderRepository.FindBy(x => x.PurchaseApplicationNumber == item.ApplicationNumber).Include(c => c.RequestHeader).FirstOrDefault(); if (newPurchaseHeader == null && purchaseApplicationHeader != null) { newPurchaseHeader = _mapper.Map <PurchaseHeader>(purchaseApplicationHeader); newPurchaseHeader.SupplierId = item.SupplierName; newPurchaseHeader.CreateDate = DateTime.Now; newPurchaseHeader.UpdateDate = DateTime.Now; //Create a new purchase header. var prefix = newPurchaseHeader.RequestCategory == RequestCategoriesEnum.采购退货 ? "RCG" : "CG"; var lastSerialNumber = _purchaseHeaderRepository.GetLatestSerialNumber(DateTime.Now); newPurchaseHeader.SerialNo = ++lastSerialNumber; newPurchaseHeader.PurchaseNumber = string.IsNullOrEmpty(temp_purchaseNumber) ? ServiceHelper.GenerateCodeNumber(prefix, newPurchaseHeader.SerialNo) : temp_purchaseNumber; newPurchaseHeader.RequestCategory = purchaseApplicationHeader.RequestHeader.RequestCategory; } if (newPurchaseHeader == null) { continue; } var newPurchase = new Purchase { PurchaseNumber = newPurchaseHeader.PurchaseNumber, CurrentPurchasePrice = item.CurrentPurchasePrice, PurchaseTotal = item.TotalConfirmed, PurchaseApplicationId = item.PurchaseApplicationId, CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Status = purchaseApplicationHeader != null && purchaseApplicationHeader.RequestHeader.RequestCategory == RequestCategoriesEnum.采购退货 ? ProcessStatusEnum.退货中 : ProcessStatusEnum.采购中 }; listOfPurchase.Add(newPurchase); } } _purchaseHeaderRepository.Add(newPurchaseHeader); _purchaseRepository.AddRange(listOfPurchase); _purchaseHeaderRepository.Save(); _purchaseRepository.Save(); //更新采购申请表的状态和需求表状态 foreach (var item in models) { UpdatePurchaseApplicationProcessStatus(item.PurchaseApplicationId, item.RequestCategory == RequestCategoriesEnum.采购退货 ? ProcessStatusEnum.退货中 : ProcessStatusEnum.采购中); } return(1); } catch (DbUpdateException) { return(0); } } return(0); }