Example #1
0
 public InvoiceCommand(InvoiceTypes invoiceType,
                string invoiceNumber,
                Company owner,
                DateTime invoiceDate,
                DivisionMethods divisionMethod,
                AccountingTypes accountType,
                Invoice invoiceRefrence,
                List<long> orderRefrences,
                Currency currency,
                Company transporter,
                Company supplier,
                string description,
                List<InvoiceItemCommand> list)
 {
     // TODO: Complete member initialization
     InvoiceType = invoiceType;
     InvoiceNumber = invoiceNumber;
     Owner = owner;
     InvoiceDate = invoiceDate;
     DivisionMethod = divisionMethod;
     AccountingType = accountType;
     InvoiceRefrence = invoiceRefrence;
     OrdersRefrenceId = orderRefrences;
     Currency = currency;
     Transporter = transporter;
     Supplier = supplier;
     Description = description;
     InvoiceItems = list;
 }
Example #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);
        }
Example #3
0
        public Invoice CreateInvoiceObject(InvoiceCommand invoiceCommand, IEnumerable<Good> goods, Company owner, Company transporter, Company supplier, Invoice invoiceRefrence, List<Order> orderRefrences, Currency currency, List<InvoiceItem> invoiceItems, List<InvoiceAdditionalPrice> invoiceAdditionalPriceList, bool forCalculate)
        {
            var invoice = new Invoice
                (
                invoiceCommand.InvoiceType, invoiceCommand.InvoiceNumber, owner, invoiceCommand.InvoiceDate,
                invoiceCommand.DivisionMethod, invoiceCommand.AccountingType, invoiceRefrence, orderRefrences,currency,invoiceCommand.IsCreditor, transporter,
                supplier, invoiceCommand.Description, invoiceItems, invoiceAdditionalPriceList, invoiceConfigurator, invoiceDomainService,
                invoiceItemDomainService,goodUnitConvertorDomainService,invoiceAdditionalPriceDomainService,balanceDomainService);

            if (!forCalculate)
            {
                var init = workflowRepository.Single
                    (c => c.WorkflowEntity == WorkflowEntities.Invoice && c.CurrentWorkflowStage == WorkflowStages.Initial);
                var invoiceWorkflow = new InvoiceWorkflowLog
                    (invoice.Id, WorkflowEntities.Invoice, DateTime.Now, WorkflowActions.Init,
                    //TODO: Fake ActorId
                    1101, "", init.Id, true);
                invoice.ApproveWorkFlows.Add(invoiceWorkflow);
            }
            return invoice;
        }
Example #4
0
        //public List<InvoiceItem> Process(Invoice invoice, List<InvoiceItem> invoiceItems, List<Order> orderRefrences)
        //{
        //    foreach (var item in invoice.InvoiceItems.ToList())
        //    {
        //        balanceDomainService.DeleteInvoiceItemRefrencesFromBalance(item.Id);
        //        invoiceItemDomainService.DeleteInvoiceItem(item);
        //    }
        //    foreach (var invoiceItem in invoiceItems)
        //    {
        //        balanceDomainService.CreateBalanceRecordForInvoiceItem(invoiceItem, orderRefrences);
        //    }
        //    return invoiceItems;
        //}
        public List<OrderItemBalance> Process(Invoice invoice, List<InvoiceItem> invoiceItems, List<Order> orderRefrences)
        {
            var result = new List<OrderItemBalance>();

            foreach (var invoiceItem in invoiceItems)
            {
                result.AddRange(balanceDomainService.CreateBalanceRecordForInvoiceItem(invoiceItem, orderRefrences));
            }

            return result;
        }
Example #5
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>();
        }
        public List<InventoryOperation> NotifySubmittingInvoice(Invoice source)
        {
            var invoiceDto = invoiceToDtoMapper.MapToModel(source);

            return new List<InventoryOperation>(new InventoryOperation[]
                    {
                     new InventoryOperation(
                         312,
                     "INV# - " +DateTime.Now.Ticks,
                        DateTime.Now,
                        InventoryActionType.Issue,
                        (long? )null,
                        (long? )null)});
        }
        //================================================================================
        public List<InventoryOperation> ManageInvoice(Invoice invoice, int userId)
        {
            using (var dbContext = new InventoryDbContext())
            {
                using (var transaction = new TransactionScope())
                {
                    foreach (var orderItemBalance in invoice.OrderRefrences.SelectMany(o => o.OrderItems.SelectMany(oi => oi.OrderItemBalances)))
                    {
                        //Finding relevant Receipt Item
                        var receiptReference = findInventoryOperationReference(
                            dbContext, InventoryOperationType.Receipt, FUEL_REPORT_DETAIL_RECEIVE,
                            orderItemBalance.FuelReportDetailId.ToString());

                        var receiptReferenceTransactionItem = dbContext.TransactionItems.Where(
                            tip =>
                                tip.TransactionId == (int)receiptReference.OperationId &&
                                tip.GoodId == (int)orderItemBalance.FuelReportDetail.Good.SharedGoodId);

                        var receiptRegisteredPrices = dbContext.TransactionItemPrices.Where(
                            tip =>
                                tip.TransactionItem.TransactionId == (int)receiptReference.OperationId &&
                                tip.TransactionItem.GoodId == (int)orderItemBalance.FuelReportDetail.Good.SharedGoodId);

                        var receiptPriceReferenceNumber = generateOrderItemBalancePricingReferenceNumber(orderItemBalance);

                        var receiptRegisteredPriceReference = findInventoryOperationReference(dbContext, InventoryOperationType.Receipt, FUEL_REPORT_DETAIL_RECEIPT_INVOICE, receiptPriceReferenceNumber);

                        receiptRegisteredPrices.FirstOrDefault(p => p.Id == receiptRegisteredPriceReference.OperationId);

                        var referenceNumber = orderItemBalance.FuelReportDetailId;
                    }

                    var reference = findInventoryOperationReference(dbContext, InventoryOperationType.Issue, FUEL_REPORT_DETAIL_RECEIPT_INVOICE, invoice.Id.ToString());

                    //if (reference.OperationId == INVALID_ID)
                    if (reference == null)
                    {

                    }
                    else
                    {
                        var transactionItems = dbContext.TransactionItems.Where(ti => ti.TransactionId == reference.OperationId);

                    }
                }
            }

            return null;
        }
        public Invoice CalculateAdditionalPrice(InvoiceCommand invoiceCommand)
        {
            var invoice = new Invoice();
            if (invoiceCommand.Id != 0)
            {
                invoice = invoiceRepository.GetConfiguredInvoice(invoiceCommand.Id, new SingleResultFetchStrategy<Invoice>()
                    .Include(c => c.InvoiceItems)
                    .Include(c=>c.OrderRefrences)
                     .Include(c => c.AdditionalPrices)
                    .Include(c=>c.OrderRefrences.Select(d=>d.OrderItems)),invoiceConfigurator);

                if (invoice == null)
                    throw new ObjectNotFound("Invoice", invoiceCommand.Id);
            }

            var orderRefrences = GetOrderRefrences(invoiceCommand.OrdersRefrenceId);
            var invoiceRefrence = GetInvoiceRefrence(invoiceCommand.InvoiceRefrenceId);

            var transporter = invoiceCommand.TransporterId == null ? null : companyRepository.Single(c => c.Id == invoiceCommand.TransporterId);
            var supplier = invoiceCommand.SupplierId == null ? null : companyRepository.Single(c => c.Id == invoiceCommand.SupplierId);
            var owner = companyRepository.Single(c => c.Id == invoiceCommand.OwnerId);
            if (owner == null)
                throw new ObjectNotFound("Company", invoiceCommand.OwnerId);

            var currency = currencyDomainService.Get(invoiceCommand.CurrencyId);
            if (currency == null)
                throw new ObjectNotFound("Currency", invoiceCommand.CurrencyId);

            var goods = goodDomainService.GetCompanyGoodsWithUnits(invoiceCommand.OwnerId).ToList();

            if (invoiceCommand.Id != 0 && invoiceCommand.InvoiceType != invoice.InvoiceType)
                throw new InvalidOperation("Update", "Can not Update Invoice Type");

            var invoiceItems = GetInvoiceItems(invoiceCommand, goods).ToList();

            var invoiceAdditionalPriceList = GetAdditionalPrice(invoiceCommand);

            if (invoice.Id == 0)
                invoice = invoiceFactory.CreateInvoiceObject
                    (
                        invoiceCommand, goods, owner, transporter, supplier, invoiceRefrence, orderRefrences, currency, invoiceItems,
                        invoiceAdditionalPriceList, true);
            else
                invoice.Update
                    (
                        invoiceCommand.InvoiceNumber, invoiceCommand.InvoiceDate, invoiceCommand.DivisionMethod, invoiceRefrence, orderRefrences,
                        currency, invoiceCommand.IsCreditor, transporter, supplier, invoiceCommand.Description, invoiceItems,
                        invoiceAdditionalPriceList, invoiceDomainService, invoiceItemDomainService, goodUnitConvertorDomainService,
                        invoiceAdditionalPriceDomainService, balanceDomainService);

            var invoice2 = invoiceAdditionalPriceDomainService.CalculateAdditionalPrice(invoice);

            return invoice2;
        }
        public List<InventoryOperation> NotifySubmittingInvoice(Invoice source)
        {
            var invoiceDto = invoiceToDtoMapper.MapToModel(source);

            //var inventoryOperationDtosResult = svc.NotifySubmittingInvoice(invoiceDto).ToList();

            //var result = inventoryOperationDtosResult.Select(mapInventoryOperationDtoToInventoryOperation);

            //return result.ToList();

            var syncEvent = new AutoResetEvent(false);

            List<InventoryOperation> callResult = null;
            Exception callException = null;

            ClientHelper.Post<List<FuelReportInventoryOperationDto>, InvoiceDto>
                //(new Uri("http://localhost:65234/api/fuelevents", UriKind.Absolute),
                //(new Uri("http://evaluation-srv:9090/api/fuelevents", UriKind.Absolute),
                (MessageBrokerApiUri, (result, exp) =>
                {
                    callException = exp;
                    if (result != null)
                        callResult = result.Select(mapInventoryOperationDtoToInventoryOperation).ToList();

                    syncEvent.Set();
                },
                invoiceDto, ClientHelper.MessageFormat.Json, new Dictionary<string, string>(), "InvoiceDto");

            syncEvent.WaitOne();

            if (callException != null)
                throw callException;

            return callResult;
        }
        public List<InventoryOperation> NotifySubmittingInvoice(Invoice source)
        {
            //var invoiceDto = invoiceToDtoMapper.MapToModel(source);

            //var inventoryOperationDtosResult = svc.NotifySubmittingInvoice(invoiceDto).ToList();

            //var result = inventoryOperationDtosResult.Select(mapInventoryOperationDtoToInventoryOperation);

            //return result.ToList();

            return null;
        }
 public void UpdateOrderItemsFromInvoiceItem(Invoice invoice)
 {
 }