예제 #1
0
        //public InvoiceFacadeService()
        //{
        //    try
        //    {
        //        ServiceLocator.Current.GetInstance<IInvoiceDomainService>();
        //        ServiceLocator.Current.GetInstance<IInvoiceApplicationService>();
        //        ServiceLocator.Current.GetInstance<IInvoiceToDtoMapper>();
        //        ServiceLocator.Current.GetInstance<IInvoiceItemToDtoMapper>();
        //        ServiceLocator.Current.GetInstance<IInvoiceRepository>();
        //        ServiceLocator.Current.GetInstance<IGoodUnitConvertorDomainService>();
        //        ServiceLocator.Current.GetInstance<IMainUnitVlaueTomainUnitVlaueDtoMapper>();
        //        ServiceLocator.Current.GetInstance<IUnitOfWorkScope>();
        //        ServiceLocator.Current.GetInstance<IInvoiceItemDomainService>();
        //        ServiceLocator.Current.GetInstance<IEffectiveFactorMapper>();
        //        ServiceLocator.Current.GetInstance<IInvoiceAdditionalPriceDomainService>();
        //    }
        //    catch (Exception ex)
        //    {
        //        throw;
        //    }
        //}
        public InvoiceFacadeService(IInvoiceDomainService invoiceDomainService,
            IInvoiceApplicationService invoiceAppService,
            IInvoiceToDtoMapper invoiceDtoMapper,
            IInvoiceItemToDtoMapper itemToDtoMapper,
            IInvoiceRepository invoiceRepository,
            IGoodUnitConvertorDomainService goodUnitConvertorDomainService,
            IMainUnitVlaueTomainUnitVlaueDtoMapper mainUnitVlaueTomainUnitVlaueDtoMapper,
            IInvoiceItemDomainService invoiceItemDomainService,
            IEffectiveFactorMapper effectiveFactorMapper,
            IInvoiceAdditionalPriceDomainService invoiceAdditionalPriceDomainService,
            IBalanceDomainService balanceDomainService
            )
        {
            this.invoiceDomainService = invoiceDomainService;
            this.invoiceRepository = invoiceRepository;
            this.goodUnitConvertorDomainService = goodUnitConvertorDomainService;
            this.mainUnitVlaueTomainUnitVlaueDtoMapper = mainUnitVlaueTomainUnitVlaueDtoMapper;
            this.invoiceItemDomainService = invoiceItemDomainService;

            this.effectiveFactorMapper = effectiveFactorMapper;
            this.invoiceAdditionalPriceDomainService = invoiceAdditionalPriceDomainService;
            this.balanceDomainService = balanceDomainService;
            this.invoiceAppService = invoiceAppService;
            this.invoiceDtoMapper = invoiceDtoMapper;
            this.itemToDtoMapper = itemToDtoMapper;
        }
예제 #2
0
        public Invoice(InvoiceTypes invoiceType,
                       string invoiceNumber,
                       Company owner,
                       DateTime invoiceDate,
                       DivisionMethods divisionMethod,
                       AccountingTypes accountType,
                       Invoice invoiceRefrence,
                       List<Order> orderRefrences,
                       Currency currency,
                       bool isCreditor,
                       Company transporter,
                       Company supplier,
                       string description,
                       List<InvoiceItem> list,
                       List<InvoiceAdditionalPrice> invoiceAdditionalPriceList,
                       IEntityConfigurator<Invoice> invoiceConfigurator,
                       IInvoiceDomainService invoiceDomainService,
                       IInvoiceItemDomainService invoiceItemDomainService,
                       IGoodUnitConvertorDomainService goodUnitConvertorDomainService,
                       IInvoiceAdditionalPriceDomainService invoiceAdditionalPriceDomainService,
                       IBalanceDomainService balanceDomainService)
            : this()
        {
            // TODO: Complete member initialization
            InvoiceType = invoiceType;
            InvoiceNumber = invoiceNumber;
            Owner = owner;
            InvoiceDate = invoiceDate;
            DivisionMethod = divisionMethod;
            AccountingType = accountType;
            InvoiceRefrence = invoiceRefrence;
            OrderRefrences = orderRefrences;
            Currency = currency;
            IsCreditor = isCreditor;
            Transporter = transporter;
            Supplier = supplier;

            TransporterId = Transporter == null ? (long?)null : Transporter.Id;
            SupplierId = Supplier == null ? (long?)null : Supplier.Id;
            InvoiceRefrenceId = InvoiceRefrence == null ? (long?)null : InvoiceRefrence.Id;
            Description = description;

            UpdateInvoiceItems(list, null, balanceDomainService);
            UpdateInvoiceAdditionalPrice(invoiceAdditionalPriceList, null);

            this.invoiceConfigurator = invoiceConfigurator;
            this.invoiceAdditionalPriceDomainService = invoiceAdditionalPriceDomainService;
            invoiceConfigurator.Configure(this);
            invoiceBaseType.ValidateType(this);

            checkInvoiceNumberToBeUnique(invoiceDomainService);
            CheckInvoiceHaveInvoiceItem();
            invoiceBaseType.CheckInvoiceItemValidateQuantityAndRefrence(this, invoiceItemDomainService, goodUnitConvertorDomainService);
            invoiceAdditionalPriceDomainService.CalculateAdditionalPrice(this);
        }
예제 #3
0
 public OpenState(
     IInvoiceItemDomainService invoiceItemDomainService,
     IBalanceDomainService balanceDomainService,
     IInventoryOperationNotifier inventoryOperationNotifier, 
     IInvoiceStateFactory invoiceStateFactory)
 {
     this.invoiceItemDomainService = invoiceItemDomainService;
     this.balanceDomainService = balanceDomainService;
     this.inventoryOperationNotifier = inventoryOperationNotifier;
     this.invoiceStateFactory = invoiceStateFactory;
 }
예제 #4
0
 public InvoiceFactory(
                     IEntityConfigurator<Invoice> invoiceConfigurator,
     IWorkflowRepository workflowRepository,
     IInvoiceDomainService invoiceDomainService,
     IInvoiceItemDomainService invoiceItemDomainService, IGoodUnitConvertorDomainService goodUnitConvertorDomainService,
     IInvoiceAdditionalPriceDomainService invoiceAdditionalPriceDomainService, IBalanceDomainService balanceDomainService)
 {
     this.invoiceConfigurator = invoiceConfigurator;
     this.workflowRepository = workflowRepository;
     this.invoiceDomainService = invoiceDomainService;
     this.invoiceItemDomainService = invoiceItemDomainService;
     this.goodUnitConvertorDomainService = goodUnitConvertorDomainService;
     this.invoiceAdditionalPriceDomainService = invoiceAdditionalPriceDomainService;
     this.balanceDomainService = balanceDomainService;
 }
        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;
        }
 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;
 }
예제 #7
0
 public CalculateChangeInOrderBlance(IInvoiceItemDomainService invoiceItemDomainService,
     IBalanceDomainService balanceDomainService)
 {
     this.invoiceItemDomainService = invoiceItemDomainService;
     this.balanceDomainService = balanceDomainService;
 }
예제 #8
0
        private void UpdateInvoiceItems(List<InvoiceItem> invoiceItems,
                                        IInvoiceItemDomainService invoiceItemDomainService,
                                        IBalanceDomainService balanceDomainService)
        {
            if (InvoiceType == InvoiceTypes.Attach)
            {
                if (InvoiceRefrence == null)
                    throw new BusinessRuleException("", "Reference not Set");

                //<A.H> Moved to the outside of if block.
                //foreach (var invoiceItem in InvoiceItems.ToList())
                //{
                //    invoiceItemDomainService.DeleteInvoiceItem(invoiceItem);
                //}

                //<A.H> Moved to the outside of if block.
                //InvoiceItems = invoiceItems;
            }

            for (int index = 0; index < InvoiceItems.Count; index++)
            {
                invoiceItemDomainService.DeleteInvoiceItem(InvoiceItems[index]);
            }
            InvoiceItems = invoiceItems;

            //<A.H> : The implementation has been moved to Submit method.
            //else
            //{
            //    if (OrderRefrences == null)
            //        throw new BusinessRuleException("", "Reference not Set");
            //    var c = new CalculateChangeInOrderBlance(invoiceItemDomainService, balanceDomainService);
            //    InvoiceItems = c.Process(this, invoiceItems, OrderRefrences);
            //}
        }
예제 #9
0
        public void Update(string invoiceNumber,
                           DateTime invoiceDate,
                           DivisionMethods divisionMethod,
                           Invoice invoiceRefrence,
                           List<Order> orderRefrences,
                           Currency currency,
                           bool isCreditor,
                           Company transporter,
                           Company supplier,
                           string description,
                           List<InvoiceItem> invoiceItems,
                           List<InvoiceAdditionalPrice> invoiceAdditionalPriceList,
                           IInvoiceDomainService invoiceDomainService,
                           IInvoiceItemDomainService invoiceItemDomainService,
                           IGoodUnitConvertorDomainService goodUnitConvertorDomainService,
                           IInvoiceAdditionalPriceDomainService invoiceAdditionalPriceDomainService,
                           IBalanceDomainService balanceDomainService)
        {
            InvoiceNumber = invoiceNumber;
            InvoiceDate = invoiceDate;
            DivisionMethod = divisionMethod;
            InvoiceRefrence = invoiceRefrence;
            OrderRefrences = orderRefrences;
            Currency = currency;
            Transporter = transporter;
            Supplier = supplier;
            Description = description;
            IsCreditor = isCreditor;
            UpdateInvoiceItems(invoiceItems, invoiceItemDomainService, balanceDomainService);
            UpdateInvoiceAdditionalPrice(invoiceAdditionalPriceList, invoiceAdditionalPriceDomainService);

            TransporterId = Transporter == null ? (long?)null : Transporter.Id;
            SupplierId = Supplier == null ? (long?)null : Supplier.Id;
            InvoiceRefrenceId = InvoiceRefrence == null ? (long?)null : InvoiceRefrence.Id;

            // this.invoiceConfigurator = invoiceConfigurator;
            //                        invoiceConfigurator.Configure(this);

            checkInvoiceNumberToBeUnique(invoiceDomainService);
            CheckInvoiceHaveInvoiceItem();
            invoiceBaseType.CheckInvoiceItemValidateQuantityAndRefrence(this, invoiceItemDomainService, goodUnitConvertorDomainService);
            invoiceBaseType.ValidateType(this);
            invoiceAdditionalPriceDomainService.CalculateAdditionalPrice(this);
            ApproveWorkFlows = new List<InvoiceWorkflowLog>();
        }
예제 #10
0
        public void SubmitInvoice(
                        IInvoiceItemDomainService invoiceItemDomainService,
                        IBalanceDomainService balanceDomainService,
                        IInventoryOperationNotifier inventoryOperationNotifier)
        {
            //  CheckInvoiceAnyInvoiceItem();

            if (OrderRefrences == null)
                throw new BusinessRuleException("", "Reference not Set");

            var c = new CalculateChangeInOrderBlance(invoiceItemDomainService, balanceDomainService);
            var orderItemsBalances = c.Process(this, this.InvoiceItems, this.OrderRefrences);

            foreach (var orderItemsBalance in orderItemsBalances)
            {
                var inventoryResult = inventoryOperationNotifier.NotifySubmittingOrderItemBalance(orderItemsBalance);

                if (inventoryResult == null)
                    throw new InvalidOperation("SubmitInvoiceOrderItemBalance", "Submit the OrderItemBalance of Invoice to Inventory resulted to an error.");

                orderItemsBalance.InventoryOperation = inventoryResult;
            }

            State = States.Submitted;
        }
예제 #11
0
        //        public void DeleteAllItems(IInvoiceItemDomainService invoiceItemDomainService)
        //        {
        //            for (int index = 0; index < InvoiceItems.Count; index++)
        //            {
        //                
        //            }
        //        }
        public void CheckDeleteRules(IBalanceDomainService balanceDomainService, IInvoiceItemDomainService invoiceItemDomainService)
        {
            if (!(State == States.Open || State == States.SubmitRejected))
                throw new BusinessRuleException("BR_IN7", "Invoice Is Open");

            foreach (var invoiceItem in InvoiceItems.ToList())
            {
                balanceDomainService.DeleteInvoiceItemRefrencesFromBalance(invoiceItem.Id);
                invoiceItemDomainService.DeleteInvoiceItem(invoiceItem);
            }
        }
예제 #12
0
 //===================================================================================
 private void sendDataToBalancingDomainService(IBalanceDomainService balanceDomainService)
 {
     foreach (var fuelReportDetail in FuelReportDetails)
     {
         if (fuelReportDetail.Receive.HasValue && fuelReportDetail.ReceiveReference != null && fuelReportDetail.ReceiveReference.ReferenceId.HasValue)
             balanceDomainService.SetReceivedData(fuelReportDetail.ReceiveReference.ReferenceId.Value, fuelReportDetail.Id, fuelReportDetail.GoodId, fuelReportDetail.MeasuringUnitId, (decimal)fuelReportDetail.Receive.Value);
     }
 }
예제 #13
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);
        }