public DomainObjects.InventoryOperation Create(FuelReportDetail fuelReportDetail, long inventoryOperationId, string actionNumber, Enums.InventoryActionType actionType, DateTime actionDate) { InventoryOperation result = new InventoryOperation( inventoryOperationId, actionNumber, actionDate, actionType, fuelReportDetail.Id, null); return result; }
public InventoryOperation ManageOrderItemBalance(OrderItemBalance orderItemBalance, int userId) { using (var dbContext = new InventoryDbContext()) { using (var transaction = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadCommitted)) { //Finding relevant Receipt Item var receiptReferenceNumber = orderItemBalance.FuelReportDetailId.ToString(); var receiptReference = findInventoryOperationReference( dbContext, InventoryOperationType.Receipt, FUEL_REPORT_DETAIL_RECEIVE, receiptReferenceNumber); var receiptReferenceTransactionItem = dbContext.TransactionItems.Single( tip => tip.TransactionId == (int)receiptReference.OperationId && tip.GoodId == (int)orderItemBalance.FuelReportDetail.Good.SharedGoodId); var receiptPriceReferenceNumber = generateOrderItemBalancePricingReferenceNumber(orderItemBalance); var receiptRegisteredPriceReference = findInventoryOperationReference(dbContext, InventoryOperationType.Pricing, FUEL_REPORT_DETAIL_RECEIPT_INVOICE, receiptPriceReferenceNumber); //There is no mechanism for editing the price of priced receipts portions. var transactionItemPrice = new TransactionItemPrice() { TransactionItemId = receiptReferenceTransactionItem.Id, QuantityUnitId = getMeasurementUnitId(dbContext, orderItemBalance.UnitCode), QuantityAmount = orderItemBalance.QuantityAmountInMainUnit, PriceUnitId = getCurrencyId(dbContext, orderItemBalance.InvoiceItem.Invoice.Currency.Abbreviation), Fee = orderItemBalance.InvoiceItem.Fee, RegistrationDate = DateTime.Now, Description = "Received Good Pricing > " + orderItemBalance.FuelReportDetail.Good.Code, UserCreatorId = userId }; string pricingMessage; priceTransactionItemManually(dbContext, transactionItemPrice, userId, out pricingMessage, FUEL_REPORT_DETAIL_RECEIPT_INVOICE, receiptPriceReferenceNumber); var pricingOperationReference = findInventoryOperationReference(dbContext, InventoryOperationType.Pricing, FUEL_REPORT_DETAIL_RECEIPT_INVOICE, receiptPriceReferenceNumber); var result = new InventoryOperation( pricingOperationReference.OperationId, actionNumber: string.Format("{0}/{1}", (InventoryOperationType)pricingOperationReference.OperationType, pricingOperationReference.OperationId), actionDate: DateTime.Now, actionType: InventoryActionType.Pricing, fuelReportDetailId: null, charterId: null); transaction.Commit(); return result; } } }
//================================================================================ public InventoryOperation ManageFuelReportConsumption(FuelReport fuelReport, int userId) { if (!(fuelReport.FuelReportType == FuelReportTypes.EndOfVoyage || fuelReport.FuelReportType == FuelReportTypes.EndOfYear || fuelReport.FuelReportType == FuelReportTypes.EndOfMonth)) throw new InvalidArgument("The given entity is not EOV, EOM, EOY.", "charterOutStart"); using (var dbContext = new InventoryDbContext()) { using (var transaction = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadCommitted)) { InventoryOperation result = null; //TODO: EOV-EOM-EOY #region EOV-EOM-EOY var goodsConsumption = new Dictionary<long, decimal>(); foreach (var detail in fuelReport.FuelReportDetails) { var consumption = calculateConsumption(detail); goodsConsumption.Add(detail.GoodId, consumption); } var transactionReferenceNumber = fuelReport.Id.ToString(); var reference = findInventoryOperationReference(dbContext, InventoryOperationType.Issue, EOV_EOM_EOY_FUEL_REPORT_CONSUMPTION, transactionReferenceNumber); //if (reference.OperationId == INVALID_ID) if (reference == null) { string transactionCode, transactionMessage; var operationReference = issue( dbContext, (int)fuelReport.VesselInCompany.CompanyId, (int)fuelReport.VesselInCompany.VesselInInventory.Id, 1, convertFuelReportConsumptionTypeToStoreType(fuelReport), null, EOV_EOM_EOY_FUEL_REPORT_CONSUMPTION, transactionReferenceNumber, userId, out transactionCode, out transactionMessage); string transactionItemMessage; var transactionItems = new List<TransactionItem>(); foreach (var fuelReportDetail in fuelReport.FuelReportDetails) { transactionItems.Add(new TransactionItem() { GoodId = (int)fuelReportDetail.Good.SharedGoodId, CreateDate = DateTime.Now, Description = fuelReportDetail.FuelReport.FuelReportType.ToString(), QuantityAmount = goodsConsumption[fuelReportDetail.GoodId], QuantityUnitId = getMeasurementUnitId(dbContext, fuelReportDetail.MeasuringUnit.Abbreviation), TransactionId = (int)operationReference.OperationId, UserCreatorId = userId }); } var registeredTransactionIds = addTransactionItems(dbContext, (int)operationReference.OperationId, transactionItems, userId, out transactionItemMessage); string issuedItemsPricingMessage; var pricingTransactionIds = registeredTransactionIds.Select(id => new TransactionItemPricingId() { Id = id, Description = "Voyage Consumption FIFO Pricing" }); try { priceIssuedItemsInFIFO(dbContext, pricingTransactionIds, userId, out issuedItemsPricingMessage, EOV_EOM_EOY_FUEL_REPORT_CONSUMPTION_PRICING, transactionReferenceNumber); } catch { } result = new InventoryOperation( inventoryOperationId: operationReference.OperationId, actionNumber: string.Format("{0}/{1}", (InventoryOperationType)operationReference.OperationType, operationReference.OperationId), actionDate: DateTime.Now, actionType: InventoryActionType.Issue, fuelReportDetailId: null, charterId: null); } else { throw new InvalidOperation("EndOfVoyage/Month/Year inventory edit", "EndOfVoyage/Month/Year inventory edit is invalid"); var transactionItems = dbContext.TransactionItems.Where(ti => ti.TransactionId == reference.OperationId); } #endregion transaction.Commit(); return result; } } }
//================================================================================ public InventoryOperation ManageCharterOutStart(CharterOut charterOutStart, int userId) { if (charterOutStart.CharterType != CharterType.Start) throw new InvalidArgument("The given entity is not Charter Out Start", "charterOutStart"); using (var dbContext = new InventoryDbContext()) { using (var transaction = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadCommitted)) { //try //{ // dbContext.Database.ExecuteSqlCommand( // TransactionalBehavior.EnsureTransaction, // "dbo.[IssueItemPricesOperation]"); //} //catch (Exception) //{ // throw; //} InventoryOperation result = null; var reference = findInventoryOperationReference(dbContext, InventoryOperationType.Issue, CHARTER_OUT_START_ISSUE, charterOutStart.Id.ToString()); //if (reference.OperationId == INVALID_ID) if (reference == null) { string transactionCode, transactionMessage; var operationReference = issue( dbContext, (int)charterOutStart.VesselInCompany.CompanyId, (int)charterOutStart.VesselInCompany.VesselInInventory.Id, 1, convertCharterOutTypeToStoreType(charterOutStart), null, CHARTER_OUT_START_ISSUE, charterOutStart.Id.ToString(), userId, out transactionCode, out transactionMessage); string transactionItemMessage; var transactionItems = new List<TransactionItem>(); foreach (var charterItem in charterOutStart.CharterItems) { transactionItems.Add(new TransactionItem() { GoodId = (int)charterItem.Good.SharedGoodId, CreateDate = DateTime.Now, Description = "Charter Out Start > " + charterItem.Good.Code, QuantityAmount = charterItem.Rob, QuantityUnitId = getMeasurementUnitId(dbContext, charterItem.GoodUnit.Abbreviation), TransactionId = (int)operationReference.OperationId, UserCreatorId = userId }); } var registeredTransactionIds = addTransactionItems(dbContext, (int)operationReference.OperationId, transactionItems, userId, out transactionItemMessage); string issuedItemsPricingMessage; var pricingTransactionIds = registeredTransactionIds.Select(id => new TransactionItemPricingId() { Id = id, Description = "Charter-Out Start FIFO Pricing" }); priceIssuedItemsInFIFO(dbContext, pricingTransactionIds, userId, out issuedItemsPricingMessage, CHARTER_OUT_START_ISSUE_PRICING, charterOutStart.Id.ToString()); deactivateWarehouse(dbContext, (int)charterOutStart.VesselInCompany.VesselInInventory.Id, userId); result = new InventoryOperation( inventoryOperationId: operationReference.OperationId, actionNumber: string.Format("{0}/{1}", (InventoryOperationType)operationReference.OperationType, operationReference.OperationId), actionDate: DateTime.Now, actionType: InventoryActionType.Issue, fuelReportDetailId: null, charterId: null); } else { throw new InvalidOperation("CharterOutStart disapprovement", "CharterOutStart disapprovement is invalid."); var transactionItems = dbContext.TransactionItems.Where(ti => ti.TransactionId == reference.OperationId); } transaction.Commit(); return result; } } }
private InventoryOperation mapInventoryOperationDtoToInventoryOperation(FuelReportInventoryOperationDto arg) { var result = new InventoryOperation(arg.Code, arg.ActionDate, mapInventoryActionType(arg.ActionType), null, null); return result; }