Beispiel #1
0
 public OffhireFactory(
     IEntityConfigurator<Offhire> offhireConfigurator,
     IWorkflowRepository workflowRepository,
     IOffhireDomainService offhireDomainService,
     IVesselInCompanyDomainService vesselDomainService,
     ICompanyDomainService companyDomainService,
     ITankDomainService tankDomainService,
     ICurrencyDomainService currencyDomainService,
     IGoodDomainService goodDomainService,
     IGoodUnitDomainService goodUnitDomainService,
     IOffhireManagementSystemDomainService offhireManagementSystemDomainService,
     IVoyageDomainService voyageDomainService,
     IActivityLocationDomainService activityLocationDomainService)
 {
     this.offhireConfigurator = offhireConfigurator;
     this.workflowRepository = workflowRepository;
     this.offhireDomainService = offhireDomainService;
     this.vesselDomainService = vesselDomainService;
     this.companyDomainService = companyDomainService;
     this.tankDomainService = tankDomainService;
     this.currencyDomainService = currencyDomainService;
     this.goodDomainService = goodDomainService;
     this.goodUnitDomainService = goodUnitDomainService;
     this.offhireManagementSystemDomainService = offhireManagementSystemDomainService;
     this.voyageDomainService = voyageDomainService;
     this.activityLocationDomainService = activityLocationDomainService;
 }
        public OffhireApplicationService(
            IOffhireFactory offhireFactory,
            IOffhireRepository offhireRepository,
            IUnitOfWorkScope unitOfWorkScope,
            IOffhireDomainService offhireDomainService,
            IEntityConfigurator<Offhire> offhireConfigurator,
            IVesselInCompanyDomainService vesselDomianService,
            IVoyageDomainService voyageDomianService,
            ICompanyDomainService companyDomainService,
            ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService,
            IGoodUnitDomainService goodUnitDomainService,
            ITankDomainService tankDomainService,
            IActivityLocationDomainService activityLocationDomainService,
            IOffhireManagementSystemDomainService offhireManagementSystemDomainService)
        {
            this.offhireFactory = offhireFactory;
            this.offhireRepository = offhireRepository;
            this.unitOfWorkScope = unitOfWorkScope;

            this.offhireDomainService = offhireDomainService;
            this.vesselDomianService = vesselDomianService;
            this.companyDomainService = companyDomainService;
            this.currencyDomainService = currencyDomainService;
            this.goodDomainService = goodDomainService;
            this.goodUnitDomainService = goodUnitDomainService;
            this.tankDomainService = tankDomainService;
            this.activityLocationDomainService = activityLocationDomainService;
            this.offhireManagementSystemDomainService = offhireManagementSystemDomainService;
            this.voyageDomianService = voyageDomianService;

            this.offhireDomainService.SetConfigurator(offhireConfigurator);
        }
        //    private readonly IApprovableDomainService _approvableDomainService;
        //    private readonly IGoodPartyAssignmentDomainService _goodPartyAssignmentDomainService;
        public OrderApplicationService(IOrderRepository orderRepository,
                                       IUnitOfWorkScope unitOfWorkScope,
            //  IGoodPartyAssignmentDomainService goodPartyAssignmentDomainService,
                                       //IFuelUserRepository userRepository,
                                       IVesselInCompanyDomainService vesselDomainService,
                                       IGoodDomainService goodDomainService,
                                       IOrderFactory iOrderFactory,
                                       ICompanyDomainService companyDomainService,
                                       IOrderItemDomainService orderItemDomainService,
                                       IEntityConfigurator<Order> orderConfigurator
            //,IApprovableDomainService approvableDomainService
            )
        {
            this.orderRepository = orderRepository;
            this.vesselDomainService = vesselDomainService;
            this.goodDomainService = goodDomainService;
            this.iOrderFactory = iOrderFactory;
            this.unitOfWorkScope = unitOfWorkScope;
            this.companyDomainService = companyDomainService;

            this.orderItemDomainService = orderItemDomainService;
            this.orderConfigurator = orderConfigurator;
            // _approvableDomainService = approvableDomainService;
            //  _goodPartyAssignmentDomainService = goodPartyAssignmentDomainService;
        }
 public InvoiceItemDomainService(IInvoiceRepository invoiceRepository,
     IRepository<InvoiceItem> invoiceItemRepository,
     IOrderRepository orderRepository, IGoodDomainService goodDomainService, IGoodUnitConvertorDomainService goodUnitConvertorDomainService)
 {
     this.invoiceRepository = invoiceRepository;
     this.orderRepository = orderRepository;
     this.goodDomainService = goodDomainService;
     this.goodUnitConvertorDomainService = goodUnitConvertorDomainService;
     this.invoiceItemRepository = invoiceItemRepository;
 }
 public ApprovableOffhireDomainService(
     IOffhireDomainService offhireDomainService, IFinanceNotifier eventNotifier,
     ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
     IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
 {
     this.offhireDomainService = offhireDomainService;
     this.eventNotifier = eventNotifier;
     this.tankDomainService = tankDomainService;
     this.currencyDomainService = currencyDomainService;
     this.goodDomainService = goodDomainService;
     this.goodUnitDomainService = goodUnitDomainService;
 }
 public ApprovableScrapDomainService(
     IVesselInCompanyDomainService vesselDomainService, IInventoryOperationNotifier inventoryOperationNotifier,
     ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
     IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
 {
     this.vesselDomainService = vesselDomainService;
     this.inventoryOperationNotifier = inventoryOperationNotifier;
     this.tankDomainService = tankDomainService;
     this.currencyDomainService = currencyDomainService;
     this.goodDomainService = goodDomainService;
     this.goodUnitDomainService = goodUnitDomainService;
 }
 public OffhireManagementSystemDomainService(
     IRepository<ActivityLocation> activityLocationRepository,
     //IActivityLocationDomainService activityLocationDomainService,
     IGoodDomainService goodDomainService,
     IGoodUnitDomainService goodUnitDomainService,
     ITankDomainService tankDomainService,
     IVesselInCompanyDomainService vesselDomainService, IRepository<Good> goodRepository, IRepository<GoodUnit> companyGoodUnitRepository)
 {
     //this.activityLocationDomainService = activityLocationDomainService;
     this.activityLocationRepository = activityLocationRepository;
     this.goodDomainService = goodDomainService;
     this.goodUnitDomainService = goodUnitDomainService;
     this.tankDomainService = tankDomainService;
     this.vesselDomainService = vesselDomainService;
     this.goodRepository = goodRepository;
     this.companyGoodUnitRepository = companyGoodUnitRepository;
 }
Beispiel #8
0
        internal ScrapDetail(double rob, double price, Currency currency, Good good, GoodUnit unit, Tank tank, Scrap scrap,
            IScrapDomainService scrapDomainService, ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
            : this()
        {
            this.validateScrap(scrap, scrapDomainService);

            this.validateValues(rob, price, currency, good, unit, tank, scrap,
                tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);

            this.ROB = rob;
            this.Price = price;
            this.Currency = currency;
            this.Good = good;
            this.Unit = unit;
            this.Tank = tank;
            this.Scrap = scrap;
        }
Beispiel #9
0
        internal OffhireDetail(decimal quantity, decimal feeInVoucherCurrency, decimal feeInMainCurrency, Good good, GoodUnit unit, Tank tank, Offhire offhire,
            IOffhireDomainService offhireDomainService, ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
            : this()
        {
            this.validateOffhire(offhire, offhireDomainService);

            this.validateValues(quantity, feeInVoucherCurrency, feeInMainCurrency, good, unit, tank, offhire, offhireDomainService,
                tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);

            this.Quantity = quantity;
            this.FeeInVoucherCurrency = feeInVoucherCurrency;
            this.FeeInMainCurrency = feeInMainCurrency;
            this.Good = good;
            this.Unit = unit;
            this.Tank = tank;
            this.Offhire = offhire;
        }
        public InvoiceApplicationService(IInvoiceRepository invoiceRepository,
                                         IUnitOfWorkScope unitOfWorkScope,
            //  IGoodPartyAssignmentDomainService goodPartyAssignmentDomainService,
                                         //IUserRepository userRepository,
                                         IVesselInCompanyDomainService vesselDomainService,
                                         IGoodDomainService goodDomainService,
                                         IInvoiceFactory invoiceFactory,
                                         ICompanyDomainService companyDomainService,
                                         IInvoiceDomainService invoiceDomainService,
                                         IInvoiceItemDomainService invoiceItemDomainService,
                                         IEffectiveFactorDomainService effectiveFactorDomainService,
                                         ICompanyRepository companyRepository
            //,IApprovableDomainService approvableDomainService
                                         ,
                                         IOrderRepository orderRepository,
                                         IGoodRepository goodRepository,
                                         ICurrencyDomainService currencyDomainService,
                                         IInvoiceAdditionalPriceDomainService invoiceAdditionalPriceDomainService,
                                         IGoodUnitConvertorDomainService goodUnitConvertorDomainService, IBalanceDomainService balanceDomainService, IEntityConfigurator<Invoice> invoiceConfigurator)
        {
            this.invoiceRepository = invoiceRepository;
            this.vesselDomainService = vesselDomainService;
            this.goodDomainService = goodDomainService;
            this.invoiceFactory = invoiceFactory;
            this.unitOfWorkScope = unitOfWorkScope;
            this.companyDomainService = companyDomainService;
            this.invoiceDomainService = invoiceDomainService;

            this.invoiceItemDomainService = invoiceItemDomainService;
            this.effectiveFactorDomainService = effectiveFactorDomainService;
            this.companyRepository = companyRepository;
            this.orderRepository = orderRepository;
            this.goodRepository = goodRepository;
            this.currencyDomainService = currencyDomainService;
            this.invoiceAdditionalPriceDomainService = invoiceAdditionalPriceDomainService;
            this.goodUnitConvertorDomainService = goodUnitConvertorDomainService;
            this.balanceDomainService = balanceDomainService;
            this.invoiceConfigurator = invoiceConfigurator;

            // _approvableDomainService = approvableDomainService;
            //  _goodPartyAssignmentDomainService = goodPartyAssignmentDomainService;
        }
Beispiel #11
0
 public ScrapFactory(
     IEntityConfigurator<Scrap> scrapConfigurator,
     IWorkflowRepository workflowRepository,
     IScrapDomainService scrapDomainService,
     IVesselInCompanyDomainService vesselDomainService,
     ICompanyDomainService companyDomainService,
     ITankDomainService tankDomainService,
     ICurrencyDomainService currencyDomainService,
     IGoodDomainService goodDomainService,
     IGoodUnitDomainService goodUnitDomainService)
 {
     this.scrapConfigurator = scrapConfigurator;
     this.workflowRepository = workflowRepository;
     this.vesselDomainService = vesselDomainService;
     this.companyDomainService = companyDomainService;
     this.tankDomainService = tankDomainService;
     this.currencyDomainService = currencyDomainService;
     this.goodDomainService = goodDomainService;
     this.goodUnitDomainService = goodUnitDomainService;
     this.scrapDomainService = scrapDomainService;
 }
 public ApprovableFuelReportDomainService(
     IVoyageDomainService voyageDomainService,
     IFuelReportDomainService fuelReportDomainService,
     IInventoryOperationDomainService inventoryOperationDomainService,
     IGoodDomainService goodDomainService,
     IOrderDomainService orderDomainService,
     ICurrencyDomainService currencyDomainService,
     IBalanceDomainService balanceDomainService,
     IInventoryManagementDomainService inventoryManagementDomainService,
     IInventoryOperationNotifier inventoryOperationNotifier)
 {
     this.voyageDomainService = voyageDomainService;
     this.fuelReportDomainService = fuelReportDomainService;
     this.inventoryOperationDomainService = inventoryOperationDomainService;
     this.goodDomainService = goodDomainService;
     this.orderDomainService = orderDomainService;
     this.inventoryOperationNotifier = inventoryOperationNotifier;
     this.currencyDomainService = currencyDomainService;
     this.balanceDomainService = balanceDomainService;
     this.inventoryManagementDomainService = inventoryManagementDomainService;
 }
        public ScrapApplicationService(
            IScrapFactory scrapFactory,
            IScrapRepository scrapRepository,
            IUnitOfWorkScope unitOfWorkScope,
            IScrapDomainService scrapDomainService,
            IVesselInCompanyDomainService vesselDomianService,
            ICompanyDomainService companyDomainService,
            ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService,
            IGoodUnitDomainService goodUnitDomainService,
            ITankDomainService tankDomainService)
        {
            this.scrapFactory = scrapFactory;
            this.scrapRepository = scrapRepository;
            this.unitOfWorkScope = unitOfWorkScope;

            this.scrapDomainService = scrapDomainService;
            this.vesselDomianService = vesselDomianService;
            this.companyDomainService = companyDomainService;
            this.currencyDomainService = currencyDomainService;
            this.goodDomainService = goodDomainService;
            this.goodUnitDomainService = goodUnitDomainService;
            this.tankDomainService = tankDomainService;
        }
Beispiel #14
0
        //================================================================================
        internal void Update(double rob, double price, Currency currency, Good good, GoodUnit unit, Tank tank,
            ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
        {
            this.validateValues(rob, price, currency, good, unit, tank, this.Scrap,
                 tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);

            this.ROB = rob;
            this.Price = price;
            this.Currency = currency;
            this.Unit = unit;

            if (!this.isScrapSubmitRejected.IsSatisfiedBy(this.Scrap))
            {
                this.Good = good;
                this.Tank = tank;
            }
        }
Beispiel #15
0
 //================================================================================
 public void Validate(ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
     IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
 {
     this.validateValues(this.ROB, this.Price, this.Currency, this.Good, this.Unit, this.Tank, this.Scrap,
          tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);
 }
 public GoodUnitConvertorDomainService(IGoodDomainService goodDomainService,IGoodUnitDomainService goodUnitDomainService)
 {
     _goodDomainService = goodDomainService;
     this.goodUnitDomainService = goodUnitDomainService;
 }
Beispiel #17
0
        //================================================================================
        public void ValidateMiddleApprove(IOffhireDomainService offhireDomainService,
            ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
        {
            this.validateToBeOpen();

            this.validateApproveAction(offhireDomainService, tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);
        }
Beispiel #18
0
        //===================================================================================
        /// <summary>
        /// BR_FR39
        /// </summary>
        private void validateFuelReportsOfPreviousDayForMandatoryType(
            IFuelReportDomainService fuelReportDomainService,
            IGoodDomainService goodDomainService)
        {
            return;
            var fuelReportsOfYesterday = fuelReportDomainService.GetFuelReportsFromYesterday(this);

            foreach (var yesterdayFuelReport in fuelReportsOfYesterday)
            {
                var mandatoryGoods = goodDomainService.GetMandatoryVesselGoods(this.VesselInCompanyId, yesterdayFuelReport.EventDate);

                //Validate the availability of all mandatory goods for previous day fuel report.
                if (mandatoryGoods.Count(
                    mg =>
                        !yesterdayFuelReport.FuelReportDetails.
                            Select(frd => frd.Good.Id).Contains(mg.Id)) > 0                    )
                    throw new BusinessRuleException("BR_FR39", "Some mandatory fuels not found in fuel report of yesterday.");
            }
        }
Beispiel #19
0
        //================================================================================
        private void validateValues(double rob, double price, Currency currency, Good good, GoodUnit unit, Tank tank, Scrap scrap, ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService, IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
        {
            this.validateTank(tank, scrap, tankDomainService);

            this.validateGood(good, goodDomainService);
            this.validateGoodInTank(tank, good, scrap);
            this.validateGoodToBeUniqueInDetails(good, scrap);

            this.validateROB(rob);
            this.validatePrice(price);
            this.validateCurrency(currency, currencyDomainService);

            this.validateUnit(unit, goodUnitDomainService);
            this.validateGoodUnitInCompany(scrap.VesselInCompany.Company, good, unit);
        }
Beispiel #20
0
        //================================================================================
        private void validateApproveAction(IVesselInCompanyDomainService vesselDomainService,
            ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
        {
            this.validateVesselOwnedState(this.VesselInCompany, vesselDomainService);

            this.validateBeingSubmitRejectedIfIsInScrappedState(this.VesselInCompany, vesselDomainService);

            this.validateDetailsExistance();

            this.validateDetails(tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);
        }
Beispiel #21
0
        //================================================================================
        public void ValidateMiddleApprove(IVesselInCompanyDomainService vesselDomainService,
            ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
        {
            this.validateToBeOpen();

            this.validateApproveAction(vesselDomainService, tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);
        }
Beispiel #22
0
        //================================================================================
        public ScrapDetail UpdateDetail(long scrapDetailId, double rob, double price, Currency currency, Good good, GoodUnit unit, Tank tank,
            ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
        {
            var scrapDetailToUpdate = this.findDetail(scrapDetailId);

            scrapDetailToUpdate.Update(rob, price, currency, good, unit, tank,
                 tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);

            return scrapDetailToUpdate;
        }
Beispiel #23
0
 //================================================================================
 private void validateDetails(IOffhireDomainService offhireDomainService,
     ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
     IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
 {
     this.OffhireDetails.ForEach(sd => sd.Validate(offhireDomainService, tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService));
 }
Beispiel #24
0
        //===================================================================================
        public void Submit(
            FuelReportState entityNewState,
            IVoyageDomainService voyageDomainService,
            IFuelReportDomainService fuelReportDomainService,
            IInventoryOperationDomainService inventoryOperationDomainService,
            IGoodDomainService goodDomainService,
            IOrderDomainService orderDomainService,
            ICurrencyDomainService currencyDomainService,
            IBalanceDomainService balanceDomainService,
            IInventoryManagementDomainService inventoryManagementDomainService,
            IInventoryOperationNotifier inventoryOperationNotifier)
        {
            this.CheckToBeOperational();

            validateSubmittingState(
                    voyageDomainService,
                    fuelReportDomainService,
                    inventoryOperationDomainService,
                    goodDomainService,
                    orderDomainService,
                    currencyDomainService,
                    inventoryManagementDomainService);

            sendDataToBalancingDomainService(balanceDomainService);

            if (this.FuelReportType == FuelReportTypes.EndOfVoyage ||
                this.FuelReportType == FuelReportTypes.EndOfYear ||
                this.FuelReportType == FuelReportTypes.EndOfMonth)
            {
                var inventoryResult = inventoryOperationNotifier.NotifySubmittingFuelReportConsumption(this);

                this.ConsumptionInventoryOperations.Add(inventoryResult);
            }
            else
            {
                foreach (var fuelReportDetail in this.FuelReportDetails)
                {
                    var inventoryResult = inventoryOperationNotifier.NotifySubmittingFuelReportDetail(fuelReportDetail, fuelReportDomainService);

                    if (inventoryResult != null)
                        fuelReportDetail.InventoryOperations.AddRange(inventoryResult);
                }

            }

            setEntityState(entityNewState);
        }
Beispiel #25
0
        //================================================================================
        private void validateGood(Good good, IGoodDomainService goodDomainService)
        {
            if (good == null)
                throw new BusinessRuleException("", "Good must be selected.");

            if (goodDomainService.Get(good.Id) == null)
                throw new ObjectNotFound("Good", good.Id);
        }
Beispiel #26
0
 //================================================================================
 private void validateDetails(ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
     IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
 {
     this.ScrapDetails.ForEach(sd => sd.Validate(tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService));
 }
Beispiel #27
0
        //================================================================================
        public OffhireDetail UpdateDetail(
            long offhireDetailId, decimal feeInVoucherCurrency, decimal feeInMainCurrency,
            IOffhireDomainService offhireDomainService, ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
        {
            OffhireDetail offhireDetailToUpdate = this.findDetail(offhireDetailId);

            offhireDetailToUpdate.Update(feeInVoucherCurrency, feeInMainCurrency, offhireDomainService,
                                         tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);

            return offhireDetailToUpdate;
        }
Beispiel #28
0
        //================================================================================
        private void validateApproveAction(
            IOffhireDomainService offhireDomainService,
            ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
        {
            this.validateDetailsExistance();

            this.validateDetails(offhireDomainService, tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);
        }
Beispiel #29
0
        //================================================================================
        public void Submit(SubmittedState submittedState,
            IVesselInCompanyDomainService vesselDomainService, IInventoryOperationNotifier eventNotifier,
            ITankDomainService tankDomainService, ICurrencyDomainService currencyDomainService,
            IGoodDomainService goodDomainService, IGoodUnitDomainService goodUnitDomainService)
        {
            this.validateToBeOpenOrSubmitRejected();

            this.validateApproveAction(vesselDomainService, tankDomainService, currencyDomainService, goodDomainService, goodUnitDomainService);

            //Perform Submit operations.
            //foreach (var scrapDetail in this.ScrapDetails)
            //{
            //    scrapDetail.InventoryOperations.AddRange(eventNotifier.NotifySubmittingScrapDetail(scrapDetail));
            //}

            if (this.isOpen.IsSatisfiedBy(this))
                vesselDomainService.ScrapVessel(this.VesselInCompanyId);

            var invResult = eventNotifier.NotifySubmittingScrap(this);

            this.InventoryOperations.AddRange(invResult);

            this.setState(submittedState);
        }
Beispiel #30
0
        //===================================================================================
        private void validateSubmittingState(IVoyageDomainService voyageDomainService,
            IFuelReportDomainService fuelReportDomainService, IInventoryOperationDomainService inventoryOperationDomainService, IGoodDomainService goodDomainService,
            IOrderDomainService orderDomainService, ICurrencyDomainService currencyDomainService,
            IInventoryManagementDomainService inventoryManagementDomainService)
        {
            validateToBeOpenOrSubmitRejected();

            validateVoyageId(this.VoyageId, voyageDomainService);

            //BR_FR37
            validatePreviousEndedVoyagesToBeIssued(
                voyageDomainService,
                fuelReportDomainService,
                inventoryOperationDomainService);

            //BR_FR38
            validatePreviousFuelReportsToBeFinalApproved(fuelReportDomainService);

            //BR_FR39
            validateFuelReportsOfPreviousDayForMandatoryType(
                fuelReportDomainService,
                goodDomainService);

            var isTheFirstReport = isCurrentFuelReportTheFirstOne(fuelReportDomainService);

            FuelReport previousFuelReport = getYesterdayLastFuelReport(fuelReportDomainService);

            validateFuelReportOfTheDayBefore(previousFuelReport, isTheFirstReport);

            foreach (var detailItem in this.FuelReportDetails)
            {
                FuelReportDetail fuelReportDetailOfYesterdayForRelevantGood =
                    getGoodRelevantFuelReportDetailOfYesterday(
                        detailItem.GoodId,
                        isTheFirstReport,
                        previousFuelReport);

                //All Edit Rules must be checked for details.
                detailItem.ValidateCurrentValues(
                    fuelReportDetailOfYesterdayForRelevantGood,
                    isTheFirstReport,
                    currencyDomainService);

                detailItem.ValidateTransferReferences(orderDomainService, inventoryManagementDomainService);
                detailItem.ValidateReceiveReferences(orderDomainService);
                detailItem.ValidateCorrectionReferences(isTheFirstReport, voyageDomainService, fuelReportDomainService);
            }
        }