public async Task <IActionResult> OnGetAsync(int?companyFilter, int?section, int?copyFromId) { RoutedCompanyId = companyFilter ?? 0; RoutedSectionId = section ?? 0; CopyFromId = copyFromId ?? 0; if (CopyFromId > 0) { var buyMatDoc = await _context.BuyDocuments .Include(b => b.Company) .Include(b => b.FiscalPeriod) .Include(b => b.BuyDocSeries) .Include(b => b.BuyDocType) .Include(b => b.Section) .Include(b => b.Transactor) .Include(b => b.BuyDocLines) .ThenInclude(m => m.WarehouseItem) .FirstOrDefaultAsync(m => m.Id == CopyFromId); if (buyMatDoc == null) { return(NotFound()); } //ItemVm = _mapper.Map<BuyDocCreateAjaxDto>(buyMatDoc); CopyFromItemVm = _mapper.Map <BuyDocModifyDto>(buyMatDoc); //check for new values or old values var vmLines = CopyFromItemVm.BuyDocLines; foreach (var vmLine in vmLines) { if (vmLine.TransactionUnitId == 0) { vmLine.TransactionUnitId = vmLine.PrimaryUnitId; vmLine.TransactionUnitFactor = 1; vmLine.TransUnitPrice = vmLine.UnitPrice; vmLine.TransactionQuantity = vmLine.Quontity1; } } ItemVm = new BuyDocCreateAjaxDto { AmountDiscount = CopyFromItemVm.AmountDiscount, AmountFpa = CopyFromItemVm.AmountFpa, AmountNet = CopyFromItemVm.AmountNet, BuyDocSeriesId = CopyFromItemVm.BuyDocSeriesId, CompanyId = CopyFromItemVm.CompanyId, Etiology = CopyFromItemVm.Etiology, PaymentMethodId = CopyFromItemVm.PaymentMethodId, TransactorId = CopyFromItemVm.TransactorId }; } LoadCombos(); return(Page()); }
public async Task <IActionResult> OnGetAsync(int?companyFilter, int?section, int?copyFromId) { RoutedCompanyId = (companyFilter ?? 0); RoutedSectionId = (section ?? 0); CopyFromId = (copyFromId ?? 0); if (CopyFromId > 0) { var buyMatDoc = await _context.BuyDocuments .Include(b => b.Company) .Include(b => b.FiscalPeriod) .Include(b => b.BuyDocSeries) .Include(b => b.BuyDocType) .Include(b => b.Section) .Include(b => b.Transactor) .Include(b => b.BuyDocLines) .ThenInclude(m => m.WarehouseItem) .FirstOrDefaultAsync(m => m.Id == CopyFromId); if (buyMatDoc == null) { return(NotFound()); } //ItemVm = _mapper.Map<BuyDocCreateAjaxDto>(buyMatDoc); CopyFromItemVm = _mapper.Map <BuyDocModifyDto>(buyMatDoc); ItemVm = new BuyDocCreateAjaxDto { AmountDiscount = CopyFromItemVm.AmountDiscount, AmountFpa = CopyFromItemVm.AmountFpa, AmountNet = CopyFromItemVm.AmountNet, BuyDocSeriesId = CopyFromItemVm.BuyDocSeriesId, CompanyId = CopyFromItemVm.CompanyId, Etiology = CopyFromItemVm.Etiology, PaymentMethodId = CopyFromItemVm.PaymentMethodId, TransactorId = CopyFromItemVm.TransactorId }; } LoadCombos(); return(Page()); }
private async Task <IActionResult> CreateBuyDocFromRecTrans(BuyDocCreateAjaxDto data, RecurringTransDoc recurringTransDoc) { const string sectionCode = "SYS-BUY-MATERIALS-SCN"; // bool noSupplierTrans = false; bool noWarehouseTrans = false; #region BuyDocument BuyDocCreateAjaxNoLinesDto transToAttachNoLines; BuyDocument transToAttach; DateTime dateOfTrans; if (data == null) { return(BadRequest(new { error = "Empty request data" })); } try { transToAttachNoLines = _mapper.Map <BuyDocCreateAjaxNoLinesDto>(data); transToAttach = _mapper.Map <BuyDocument>(transToAttachNoLines); dateOfTrans = data.TransDate; } catch (Exception e) { return(BadRequest(new { error = e.Message })); } var tr = _context.Database.CurrentTransaction; using (var transaction = _context.Database.BeginTransaction()) { #region Fiscal Period var fiscalPeriod = await _context.FiscalPeriods.FirstOrDefaultAsync(p => dateOfTrans >= p.StartDate && dateOfTrans <= p.EndDate); if (fiscalPeriod == null) { transaction.Rollback(); ModelState.AddModelError(string.Empty, "No Fiscal Period covers Transaction Date"); return(NotFound(new { error = "No Fiscal Period covers Transaction Date" })); } #endregion var docSeries = await _context.BuyDocSeriesDefs.SingleOrDefaultAsync(m => m.Id == data.BuyDocSeriesId); if (docSeries is null) { transaction.Rollback(); ModelState.AddModelError(string.Empty, "Δεν βρέθηκε η σειρά παραστατικού"); return(NotFound(new { error = "Buy Doc Series not found" })); } await _context.Entry(docSeries).Reference(t => t.BuyDocTypeDef).LoadAsync(); var docTypeDef = docSeries.BuyDocTypeDef; //await _context.Entry(docTypeDef) // .Reference(t => t.TransSupplierDef) // .LoadAsync(); await _context.Entry(docTypeDef) .Reference(t => t.TransTransactorDef) .LoadAsync(); await _context.Entry(docTypeDef).Reference(t => t.TransWarehouseDef) .LoadAsync(); #region Section Management int sectionId = 0; if (docTypeDef.SectionId == 0) { var sectn = await _context.Sections.SingleOrDefaultAsync(s => s.SystemName == sectionCode); if (sectn == null) { transaction.Rollback(); ModelState.AddModelError(string.Empty, "Δεν υπάρχει το Section"); return(NotFound(new { error = "Could not locate section " })); } sectionId = sectn.Id; } else { sectionId = docTypeDef.SectionId; } #endregion //var transSupplierDef = docTypeDef.TransSupplierDef; var transTransactorDef = docTypeDef.TransTransactorDef; var transWarehouseDef = docTypeDef.TransWarehouseDef; transToAttach.SectionId = sectionId; transToAttach.FiscalPeriodId = fiscalPeriod.Id; transToAttach.BuyDocTypeId = docSeries.BuyDocTypeDefId; //transToAttach.Id = 0; _context.BuyDocuments.Add(transToAttach); try { await _context.SaveChangesAsync(); } catch (Exception e) { Console.WriteLine(e); transaction.Rollback(); string msg = e.InnerException?.Message; return(BadRequest(new { error = e.Message + " " + msg })); } var docId = _context.Entry(transToAttach).Entity.Id; if (transTransactorDef.DefaultDocSeriesId > 0) { var transTransactorDefaultSeries = await _context.TransTransactorDocSeriesDefs.FirstOrDefaultAsync(p => p.Id == transTransactorDef.DefaultDocSeriesId); if (transTransactorDefaultSeries == null) { transaction.Rollback(); ModelState.AddModelError(string.Empty, "Default series for transactor transaction not found"); return(NotFound(new { error = "Default series for transactor transaction not found" })); } var sTransactorTransaction = _mapper.Map <TransactorTransaction>(data); sTransactorTransaction.TransactorId = data.TransactorId; sTransactorTransaction.SectionId = sectionId; sTransactorTransaction.TransTransactorDocTypeId = transTransactorDefaultSeries.TransTransactorDocTypeDefId; sTransactorTransaction.TransTransactorDocSeriesId = transTransactorDefaultSeries.Id; sTransactorTransaction.FiscalPeriodId = fiscalPeriod.Id; sTransactorTransaction.CreatorId = docId; ActionHandlers.TransactorFinAction(transTransactorDef.FinancialTransAction, sTransactorTransaction); sTransactorTransaction.Id = 0; _context.TransactorTransactions.Add(sTransactorTransaction); try { await _context.SaveChangesAsync(); } catch (Exception e) { Console.WriteLine(e); transaction.Rollback(); string msg = e.InnerException.Message; return(BadRequest(new { error = e.Message + " " + msg })); } } //Αυτόματη εξόφληση var paymentMethod = await _context.PaymentMethods.FirstOrDefaultAsync(p => p.Id == transToAttach.PaymentMethodId); if (paymentMethod is null) { transaction.Rollback(); ModelState.AddModelError(string.Empty, "Δεν βρέθηκε ο τρόπος πληρωμής"); return(NotFound(new { error = "Δεν βρέθηκε ο τρόπος πληρωμής" })); } if (paymentMethod.AutoPayoffWay == SeriesAutoPayoffEnum.SeriesAutoPayoffEnumAuto) { var autoPaySeriesId = transToAttach.BuyDocSeries.PayoffSeriesId; if (autoPaySeriesId > 0) { var transTransactorPayOffSeries = await _context.TransTransactorDocSeriesDefs.FirstOrDefaultAsync(p => p.Id == autoPaySeriesId); if (transTransactorPayOffSeries == null) { transaction.Rollback(); ModelState.AddModelError(string.Empty, "AutoPayOff series not found"); return(NotFound(new { error = "AutoPayOff series not found" })); } var sTransactorTransaction = _mapper.Map <TransactorTransaction>(data); sTransactorTransaction.TransactorId = data.TransactorId; sTransactorTransaction.SectionId = sectionId; sTransactorTransaction.TransTransactorDocTypeId = transTransactorPayOffSeries.TransTransactorDocTypeDefId; sTransactorTransaction.TransTransactorDocSeriesId = transTransactorPayOffSeries.Id; sTransactorTransaction.FiscalPeriodId = fiscalPeriod.Id; sTransactorTransaction.Etiology = "AutoPayOff"; sTransactorTransaction.CreatorId = docId; await _context.Entry(transTransactorPayOffSeries) .Reference(t => t.TransTransactorDocTypeDef) .LoadAsync(); var transTransactorDocTypeDef = transTransactorPayOffSeries.TransTransactorDocTypeDef; await _context.Entry(transTransactorDocTypeDef) .Reference(t => t.TransTransactorDef) .LoadAsync(); var transPaymentTransactorDef = transTransactorDocTypeDef.TransTransactorDef; ActionHandlers.TransactorFinAction(transPaymentTransactorDef.FinancialTransAction, sTransactorTransaction); _context.TransactorTransactions.Add(sTransactorTransaction); try { await _context.SaveChangesAsync(); } catch (Exception e) { transaction.Rollback(); string msg = e.InnerException.Message; return(BadRequest(new { error = e.Message + " " + msg })); } } } int warehouseSeriesId = 0; int warehouseTypeId = 0; if (transWarehouseDef.DefaultDocSeriesId > 0) { var transWarehouseDefaultSeries = await _context.TransWarehouseDocSeriesDefs.FirstOrDefaultAsync(p => p.Id == transWarehouseDef.DefaultDocSeriesId); if (transWarehouseDefaultSeries == null) { transaction.Rollback(); ModelState.AddModelError(string.Empty, "Default series for warehouse transaction not found"); return(NotFound(new { error = "Default series for warehouse transaction not found" })); } noWarehouseTrans = false; warehouseSeriesId = transWarehouseDef.DefaultDocSeriesId; warehouseTypeId = transWarehouseDefaultSeries.TransWarehouseDocTypeDefId; } else { noWarehouseTrans = true; } foreach (var dataBuyDocLine in data.BuyDocLines) { var warehouseItemId = dataBuyDocLine.WarehouseItemId; var material = await _context.WarehouseItems.SingleOrDefaultAsync(p => p.Id == warehouseItemId); if (material is null) { //Handle error transaction.Rollback(); ModelState.AddModelError(string.Empty, "Doc Line error null WarehouseItem"); return(NotFound(new { error = "Could not locate material in Doc Line " })); } #region MaterialLine var buyMaterialLine = new BuyDocLine(); decimal unitPrice = dataBuyDocLine.Price; decimal units = (decimal)dataBuyDocLine.Q1; decimal fpaRate = (decimal)dataBuyDocLine.FpaRate; decimal discountRate = (decimal)dataBuyDocLine.DiscountRate; decimal lineNetAmount = unitPrice * units; decimal lineDiscountAmount = lineNetAmount * discountRate; decimal lineFpaAmount = (lineNetAmount - lineDiscountAmount) * fpaRate; buyMaterialLine.UnitPrice = unitPrice; buyMaterialLine.AmountFpa = lineFpaAmount; buyMaterialLine.AmountNet = lineNetAmount; buyMaterialLine.AmountDiscount = lineDiscountAmount; buyMaterialLine.DiscountRate = discountRate; buyMaterialLine.FpaRate = fpaRate; buyMaterialLine.WarehouseItemId = dataBuyDocLine.WarehouseItemId; buyMaterialLine.Quontity1 = dataBuyDocLine.Q1; buyMaterialLine.Quontity2 = dataBuyDocLine.Q2; buyMaterialLine.PrimaryUnitId = dataBuyDocLine.MainUnitId; buyMaterialLine.SecondaryUnitId = dataBuyDocLine.SecUnitId; buyMaterialLine.Factor = dataBuyDocLine.Factor; buyMaterialLine.BuyDocumentId = docId; buyMaterialLine.Etiology = transToAttach.Etiology; //_context.Entry(transToAttach).Entity transToAttach.BuyDocLines.Add(buyMaterialLine); #endregion if (!noWarehouseTrans) { #region Warehouse transaction var warehouseTrans = new WarehouseTransaction { FpaRate = fpaRate, DiscountRate = discountRate, UnitPrice = unitPrice, AmountDiscount = lineDiscountAmount, AmountNet = lineNetAmount, AmountFpa = lineFpaAmount, CompanyId = transToAttach.CompanyId, Etiology = transToAttach.Etiology, FiscalPeriodId = transToAttach.FiscalPeriodId, WarehouseItemId = warehouseItemId, PrimaryUnitId = dataBuyDocLine.MainUnitId, SecondaryUnitId = dataBuyDocLine.SecUnitId, SectionId = sectionId, CreatorId = transToAttach.Id, TransDate = transToAttach.TransDate, TransRefCode = transToAttach.TransRefCode, UnitFactor = (decimal)dataBuyDocLine.Factor, TransWarehouseDocSeriesId = warehouseSeriesId, TransWarehouseDocTypeId = warehouseTypeId }; ActionHandlers.ItemNatureHandler(material.WarehouseItemNature, warehouseTrans, transWarehouseDef); ActionHandlers.ItemInventoryActionHandler(warehouseTrans.InventoryAction, dataBuyDocLine.Q1, dataBuyDocLine.Q2, warehouseTrans); ActionHandlers.ItemInventoryValueActionHandler(warehouseTrans.InventoryValueAction, warehouseTrans); _context.WarehouseTransactions.Add(warehouseTrans); #endregion } } try { await _context.SaveChangesAsync(); } catch (Exception e) { Console.WriteLine(e); transaction.Rollback(); string msg = e.InnerException.Message; return(BadRequest(new { error = e.Message + " " + msg })); } #endregion var curDate = recurringTransDoc.NextTransDate; var nextDate = GetNextTransactionDate(curDate, recurringTransDoc.RecurringFrequency); recurringTransDoc.NextTransDate = nextDate; _context.Entry(recurringTransDoc).State = EntityState.Modified; try { await _context.SaveChangesAsync(); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); string msg = e.InnerException.Message; return(BadRequest(new { error = e.Message + " " + msg })); } } return(Ok()); }