public InventoryOperation GetEndOfYearFuelReportConsumptionInventoryOperation(FuelReport fuelReport) { fuelReport.CheckToBeNotCancelled(); if (fuelReport.FuelReportType != FuelReportTypes.EndOfYear) throw new InvalidArgument("The FuelReport is not of type End Of Year to find Consumption Invenroty.", "fuelReport"); return fuelReport.ConsumptionInventoryOperations.Last(); }
public List<InventoryOperation> GetFuelReportInventoryOperations(FuelReport fuelReport) { fuelReport.CheckToBeNotCancelled(); return fuelReport.FuelReportDetails.SelectMany(frd => frd.InventoryOperations).ToList(); //return inventoryOperationRepository.Find( // inv => // fuelReport.FuelReportDetails // .SelectMany(frd => frd.InventoryOperations) // .Select(frdinv => frdinv.Id) // .Contains(inv.Id) //).ToList(); }
public void Submit(FuelReport fuelReport, FuelReportState entityNewState) { fuelReport.Submit( entityNewState, this.voyageDomainService, this.fuelReportDomainService, this.inventoryOperationDomainService, this.goodDomainService, this.orderDomainService, this.currencyDomainService, this.balanceDomainService, inventoryManagementDomainService, this.inventoryOperationNotifier); }
public InventoryOperation NotifySubmittingFuelReportConsumption(FuelReport fuelReport) { try { return this.inventoryOperationManager.ManageFuelReportConsumption(fuelReport, //TODO: Fake ActorId 1101); } catch (Exception) { throw; } }
//================================================================================ 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; } } }
private int convertFuelReportConsumptionTypeToStoreType(FuelReport fuelReport) { switch (fuelReport.FuelReportType) { case FuelReportTypes.EndOfVoyage: return 14; case FuelReportTypes.EndOfYear: return 15; case FuelReportTypes.EndOfMonth: return 16; default: throw new ArgumentOutOfRangeException(); } }
//================================================================================ public List<FuelReport> GetPreviousNotFinalApprovedReports(FuelReport fuelReport) { var fetchStrategy = new ListFetchStrategy<FuelReport>().OrderBy(c => c.EventDate); var result = this.fuelReportRepository.Find( Extensions.And(this.isFuelReportInFinalApprovedState.Not().Predicate, Extensions.And(this.isFuelReportOperational.Predicate, f => f.EventDate < fuelReport.EventDate))); return result.ToList(); }
//================================================================================ public void SetFuelReportInventoryResults(InventoryResultCommand resultCommand, FuelReport fuelReport) { foreach (var item in resultCommand.Items) { var fuelReportDetail = fuelReport.FuelReportDetails.FirstOrDefault(frd => frd.Id == item.FuelReportDetailId); if (fuelReportDetail == null) { throw new ObjectNotFound("resultBag.Item.DetailId"); } var inventoryOperationToPersist = inventoryOperationFactory.Create(fuelReportDetail, item.OperationId, item.ActionNumber, item.ActionType, item.ActionDate); inventoryOperationRepository.Add(inventoryOperationToPersist); //if (fuelReportDetail.TransferReferenceOrderId.HasValue) //{ // orderDomainService.CloseOrder(fuelReportDetail.TransferReferenceOrderId.Value); //} //if (fuelReportDetail.ReceiveReferenceOrderId.HasValue) //{ // orderDomainService.CloseOrder(fuelReportDetail.ReceiveReferenceOrderId.Value); //} } //IFuelReportStateFactory stateFactory = ServiceLocator.Current.GetInstance<IFuelReportStateFactory>(); //fuelReport.Close(stateFactory.CreateClosedState()); }
//================================================================================ public List<FuelReport> GetNotIssuedEOVFuelReportsOfPreviousVoyages(FuelReport fuelReport) { var previousEOVFuelReports = getPreviousEOVFuelReports(fuelReport.EventDate); var notIssuedEOVFuelReportsOfPreviousVoyages = previousEOVFuelReports .FindAll(eovfr => eovfr.ConsumptionInventoryOperations == null || eovfr.ConsumptionInventoryOperations.Count == 0); return notIssuedEOVFuelReportsOfPreviousVoyages; }
//================================================================================ public FuelReport GetLastIssuedEOVFuelReportOfPreviousVoyages(FuelReport fuelReport) { var previousEOVFuelReports = getPreviousEOVFuelReports(fuelReport.EventDate); var lastIssuedEOVFuelReportOfPreviousVoyages = previousEOVFuelReports .FindAll(eovfr => eovfr.ConsumptionInventoryOperations != null && eovfr.ConsumptionInventoryOperations.Count > 0) .OrderBy(eovfr=>eovfr.EventDate) .LastOrDefault(); return lastIssuedEOVFuelReportOfPreviousVoyages; }
//================================================================================ public List<FuelReport> GetFuelReportsFromYesterday(FuelReport fuelReport) { DateTime previousDayDate = fuelReport.EventDate.Date.AddDays(-1); return GetVesselFuelReports(fuelReport.VesselInCompany, previousDayDate, fuelReport.EventDate.AddMilliseconds(-1)); }
//=================================================================================== private void validateFuelReportOfTheDayBefore( FuelReport fuelReportOfTheDayBefore, bool isCurrentFuelReportTheFirst) { if (fuelReportOfTheDayBefore == null && !isCurrentFuelReportTheFirst) //This means that current Fuel Report is not the first one in the whole system and //has no Fuel Report in yesterday. throw new ObjectNotFound("FuelReportOfTheDayBefore"); //"No fuel report found for previous day."; if (fuelReportOfTheDayBefore != null) { //Checking FuelReport of the Day Before for final approval state. //TODO: The business rule code must be indicated. if (!isFuelReportClosed.IsSatisfiedBy(fuelReportOfTheDayBefore)) throw new BusinessRuleException("XXXXXX", "The previous Fuel Report must be Final Approved."); } }
//=================================================================================== private FuelReportDetail getGoodRelevantFuelReportDetailOfYesterday(long goodId, bool isTheFirstReport, FuelReport previousFuelReport) { FuelReportDetail fuelReportDetailOfYesterdayForRelevantGood = null; if (!isTheFirstReport) { //TODO: The validation of fuel types against Yesterday valid fuel types must be revised. fuelReportDetailOfYesterdayForRelevantGood = previousFuelReport.FuelReportDetails.FirstOrDefault(c => c.GoodId == goodId); if (fuelReportDetailOfYesterdayForRelevantGood == null) //Because current Fuel Report is not the first one, //its relevant Fuel Report Detail of yesterday must be found. throw new ObjectNotFound("FuelReportDetailOfYesterdayForRelevantGood", goodId); } return fuelReportDetailOfYesterdayForRelevantGood; }