private void AppsInvoiceThis(IDerivation derivation) { var salesInvoice = new SalesInvoiceBuilder(this.Strategy.Session) .WithBilledFrom(this.TakenBy) .WithBilledFromContactMechanism(this.TakenByContactMechanism) .WithBilledFromContactPerson(this.TakenByContactPerson) .WithBillToCustomer(this.BillToCustomer) .WithBillToContactMechanism(this.BillToContactMechanism) .WithBillToContactPerson(this.BillToContactPerson) .WithBillToEndCustomer(this.BillToEndCustomer) .WithBillToEndCustomerContactMechanism(this.BillToEndCustomerContactMechanism) .WithBillToEndCustomerContactPerson(this.BillToEndCustomerContactPerson) .WithShipToCustomer(this.ShipToCustomer) .WithShipToAddress(this.ShipToAddress) .WithShipToContactPerson(this.ShipToContactPerson) .WithShipToEndCustomer(this.ShipToEndCustomer) .WithShipToEndCustomerAddress(this.ShipToEndCustomerAddress) .WithShipToEndCustomerContactPerson(this.ShipToEndCustomerContactPerson) .WithDescription(this.Description) .WithStore(this.Store) .WithInvoiceDate(DateTime.UtcNow) .WithSalesChannel(this.SalesChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.Strategy.Session).SalesInvoice) .WithVatRegime(this.VatRegime) .WithDiscountAdjustment(this.DiscountAdjustment) .WithSurchargeAdjustment(this.SurchargeAdjustment) .WithShippingAndHandlingCharge(this.ShippingAndHandlingCharge) .WithFee(this.Fee) .WithCustomerReference(this.CustomerReference) .WithPaymentMethod(this.PaymentMethod) .Build(); foreach (SalesOrderItem orderItem in this.ValidOrderItems) { var amountAlreadyInvoiced = orderItem.OrderItemBillingsWhereOrderItem.Sum(v => v.Amount); var leftToInvoice = (orderItem.QuantityOrdered * orderItem.ActualUnitPrice) - amountAlreadyInvoiced; if (leftToInvoice > 0) { var invoiceItem = new SalesInvoiceItemBuilder(this.Strategy.Session) .WithInvoiceItemType(orderItem.InvoiceItemType) .WithActualUnitPrice(orderItem.ActualUnitPrice) .WithProduct(orderItem.Product) .WithQuantity(orderItem.QuantityOrdered) .WithDetails(orderItem.Details) .WithDescription(orderItem.Description) .WithInternalComment(orderItem.InternalComment) .WithMessage(orderItem.Message) .Build(); salesInvoice.AddSalesInvoiceItem(invoiceItem); new OrderItemBillingBuilder(this.strategy.Session) .WithQuantity(orderItem.QuantityOrdered) .WithAmount(leftToInvoice) .WithOrderItem(orderItem) .WithInvoiceItem(invoiceItem) .Build(); } } foreach (SalesTerm salesTerm in this.SalesTerms) { if (salesTerm.GetType().Name == typeof(IncoTerm).Name) { salesInvoice.AddSalesTerm(new IncoTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(InvoiceTerm).Name) { salesInvoice.AddSalesTerm(new InvoiceTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(OrderTerm).Name) { salesInvoice.AddSalesTerm(new OrderTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } } }
public void BaseInvoice(CustomerShipmentInvoice method) { if (this.ShipmentState.Equals(new ShipmentStates(this.Strategy.Session).Shipped) && Equals(this.Store.BillingProcess, new BillingProcesses(this.Strategy.Session).BillingForShipmentItems)) { var invoiceByOrder = new Dictionary <SalesOrder, SalesInvoice>(); var costsInvoiced = false; foreach (ShipmentItem shipmentItem in this.ShipmentItems) { foreach (OrderShipment orderShipment in shipmentItem.OrderShipmentsWhereShipmentItem) { var salesOrder = orderShipment.OrderItem.OrderWhereValidOrderItem as SalesOrder; if (!invoiceByOrder.TryGetValue(salesOrder, out var salesInvoice)) { salesInvoice = new SalesInvoiceBuilder(this.Strategy.Session) .WithStore(salesOrder.Store) .WithBilledFrom(salesOrder.TakenBy) .WithAssignedBilledFromContactMechanism(salesOrder.DerivedTakenByContactMechanism) .WithBilledFromContactPerson(salesOrder.TakenByContactPerson) .WithBillToCustomer(salesOrder.BillToCustomer) .WithAssignedBillToContactMechanism(salesOrder.DerivedBillToContactMechanism) .WithBillToContactPerson(salesOrder.BillToContactPerson) .WithBillToEndCustomer(salesOrder.BillToEndCustomer) .WithAssignedBillToEndCustomerContactMechanism(salesOrder.DerivedBillToEndCustomerContactMechanism) .WithBillToEndCustomerContactPerson(salesOrder.BillToEndCustomerContactPerson) .WithShipToCustomer(salesOrder.ShipToCustomer) .WithAssignedShipToAddress(salesOrder.DerivedShipToAddress) .WithShipToContactPerson(salesOrder.ShipToContactPerson) .WithShipToEndCustomer(salesOrder.ShipToEndCustomer) .WithAssignedShipToEndCustomerAddress(salesOrder.DerivedShipToEndCustomerAddress) .WithShipToEndCustomerContactPerson(salesOrder.ShipToEndCustomerContactPerson) .WithInvoiceDate(this.Session().Now()) .WithSalesChannel(salesOrder.SalesChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.Strategy.Session).SalesInvoice) .WithAssignedVatRegime(salesOrder.DerivedVatRegime) .WithAssignedIrpfRegime(salesOrder.DerivedIrpfRegime) .WithCustomerReference(salesOrder.CustomerReference) .WithAssignedPaymentMethod(this.PaymentMethod) .Build(); invoiceByOrder.Add(salesOrder, salesInvoice); foreach (OrderAdjustment orderAdjustment in salesOrder.OrderAdjustments) { OrderAdjustment newAdjustment = null; if (orderAdjustment.GetType().Name.Equals(typeof(DiscountAdjustment).Name)) { newAdjustment = new DiscountAdjustmentBuilder(this.Session()).Build(); } if (orderAdjustment.GetType().Name.Equals(typeof(SurchargeAdjustment).Name)) { newAdjustment = new SurchargeAdjustmentBuilder(this.Session()).Build(); } if (orderAdjustment.GetType().Name.Equals(typeof(Fee).Name)) { newAdjustment = new FeeBuilder(this.Session()).Build(); } if (orderAdjustment.GetType().Name.Equals(typeof(ShippingAndHandlingCharge).Name)) { newAdjustment = new ShippingAndHandlingChargeBuilder(this.Session()).Build(); } if (orderAdjustment.GetType().Name.Equals(typeof(MiscellaneousCharge).Name)) { newAdjustment = new MiscellaneousChargeBuilder(this.Session()).Build(); } newAdjustment.Amount ??= orderAdjustment.Amount; newAdjustment.Percentage ??= orderAdjustment.Percentage; salesInvoice.AddOrderAdjustment(newAdjustment); } if (!costsInvoiced) { var costs = this.BaseOnDeriveShippingAndHandlingCharges(); if (costs > 0) { salesInvoice.AddOrderAdjustment(new ShippingAndHandlingChargeBuilder(this.Strategy.Session).WithAmount(costs).Build()); costsInvoiced = true; } } foreach (SalesTerm salesTerm in salesOrder.SalesTerms) { if (salesTerm.GetType().Name == typeof(IncoTerm).Name) { salesInvoice.AddSalesTerm(new IncoTermBuilder(this.Strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(InvoiceTerm).Name) { salesInvoice.AddSalesTerm(new InvoiceTermBuilder(this.Strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(OrderTerm).Name) { salesInvoice.AddSalesTerm(new OrderTermBuilder(this.Strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } } } var amountAlreadyInvoiced = shipmentItem.ShipmentItemBillingsWhereShipmentItem.Sum(v => v.Amount); var leftToInvoice = (orderShipment.OrderItem.QuantityOrdered * orderShipment.OrderItem.AssignedUnitPrice) - amountAlreadyInvoiced; if (leftToInvoice > 0) { if (orderShipment.OrderItem is SalesOrderItem salesOrderItem) { var invoiceItem = new SalesInvoiceItemBuilder(this.Strategy.Session) .WithInvoiceItemType(new InvoiceItemTypes(this.Strategy.Session).ProductItem) .WithProduct(salesOrderItem.Product) .WithQuantity(orderShipment.Quantity) .WithAssignedUnitPrice(salesOrderItem.UnitPrice) .WithAssignedVatRegime(salesOrderItem.AssignedVatRegime) .WithDescription(salesOrderItem.Description) .WithInternalComment(salesOrderItem.InternalComment) .WithMessage(salesOrderItem.Message) .Build(); salesInvoice.AddSalesInvoiceItem(invoiceItem); new ShipmentItemBillingBuilder(this.Strategy.Session) .WithQuantity(shipmentItem.Quantity) .WithAmount(leftToInvoice) .WithShipmentItem(shipmentItem) .WithInvoiceItem(invoiceItem) .Build(); } } } } } }
public SalesInvoice AppsCopy(SalesInvoiceCopy method) { var salesInvoice = new SalesInvoiceBuilder(this.Strategy.Session) .WithPurchaseInvoice(this.PurchaseInvoice) .WithBilledFrom(this.BilledFrom) .WithBilledFromContactMechanism(this.BilledFromContactMechanism) .WithBilledFromContactPerson(this.BilledFromContactPerson) .WithBillToCustomer(this.BillToCustomer) .WithBillToContactMechanism(this.BillToContactMechanism) .WithBillToContactPerson(this.BillToContactPerson) .WithBillToEndCustomer(this.BillToEndCustomer) .WithBillToEndCustomerContactMechanism(this.BillToEndCustomerContactMechanism) .WithBillToEndCustomerContactPerson(this.BillToEndCustomerContactPerson) .WithShipToCustomer(this.ShipToCustomer) .WithShipToAddress(this.ShipToAddress) .WithShipToContactPerson(this.ShipToContactPerson) .WithShipToEndCustomer(this.ShipToEndCustomer) .WithShipToEndCustomerAddress(this.ShipToEndCustomerAddress) .WithShipToEndCustomerContactPerson(this.ShipToEndCustomerContactPerson) .WithDescription(this.Description) .WithStore(this.Store) .WithInvoiceDate(DateTime.UtcNow) .WithSalesChannel(this.SalesChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.Strategy.Session).SalesInvoice) .WithVatRegime(this.VatRegime) .WithDiscountAdjustment(this.DiscountAdjustment) .WithSurchargeAdjustment(this.SurchargeAdjustment) .WithShippingAndHandlingCharge(this.ShippingAndHandlingCharge) .WithFee(this.Fee) .WithCustomerReference(this.CustomerReference) .WithPaymentMethod(this.PaymentMethod) .WithComment(this.Comment) .WithInternalComment(this.InternalComment) .WithMessage(this.Message) .WithBillingAccount(this.BillingAccount) .Build(); foreach (SalesInvoiceItem salesInvoiceItem in this.SalesInvoiceItems) { var invoiceItem = new SalesInvoiceItemBuilder(this.Strategy.Session) .WithInvoiceItemType(salesInvoiceItem.InvoiceItemType) .WithActualUnitPrice(salesInvoiceItem.ActualUnitPrice) .WithProduct(salesInvoiceItem.Product) .WithProductFeature(salesInvoiceItem.ProductFeature) .WithQuantity(salesInvoiceItem.Quantity) .WithDescription(salesInvoiceItem.Description) .WithSerialisedItem(salesInvoiceItem.SerialisedItem) .WithComment(salesInvoiceItem.Comment) .WithDetails(salesInvoiceItem.Details) .WithInternalComment(salesInvoiceItem.InternalComment) .WithMessage(salesInvoiceItem.Message) .WithFacility(salesInvoiceItem.Facility) .Build(); salesInvoice.AddSalesInvoiceItem(invoiceItem); foreach (SalesTerm salesTerm in salesInvoiceItem.SalesTerms) { if (salesTerm.GetType().Name == typeof(IncoTerm).Name) { salesInvoiceItem.AddSalesTerm(new IncoTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(InvoiceTerm).Name) { salesInvoiceItem.AddSalesTerm(new InvoiceTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(OrderTerm).Name) { salesInvoiceItem.AddSalesTerm(new OrderTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } } } foreach (SalesTerm salesTerm in this.SalesTerms) { if (salesTerm.GetType().Name == typeof(IncoTerm).Name) { salesInvoice.AddSalesTerm(new IncoTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(InvoiceTerm).Name) { salesInvoice.AddSalesTerm(new InvoiceTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(OrderTerm).Name) { salesInvoice.AddSalesTerm(new OrderTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } } return(salesInvoice); }
public void AppsInvoiceThis(IDerivation derivation) { var invoiceByOrder = new Dictionary <SalesOrder, SalesInvoice>(); var costsInvoiced = false; foreach (ShipmentItem shipmentItem in this.ShipmentItems) { foreach (OrderShipment orderShipment in shipmentItem.OrderShipmentsWhereShipmentItem) { var salesOrder = orderShipment.OrderItem.OrderWhereValidOrderItem as SalesOrder; var salesOrderItem = orderShipment.OrderItem as SalesOrderItem; if (!invoiceByOrder.TryGetValue(salesOrder, out var salesInvoice)) { salesInvoice = new SalesInvoiceBuilder(this.Strategy.Session) .WithStore(salesOrder.Store) .WithBilledFrom(salesOrder.TakenBy) .WithBilledFromContactMechanism(salesOrder.TakenByContactMechanism) .WithBilledFromContactPerson(salesOrder.TakenByContactPerson) .WithBillToCustomer(salesOrder.BillToCustomer) .WithBillToContactMechanism(salesOrder.BillToContactMechanism) .WithBillToContactPerson(salesOrder.BillToContactPerson) .WithBillToEndCustomer(salesOrder.BillToEndCustomer) .WithBillToEndCustomerContactMechanism(salesOrder.BillToEndCustomerContactMechanism) .WithBillToEndCustomerContactPerson(salesOrder.BillToEndCustomerContactPerson) .WithShipToCustomer(salesOrder.ShipToCustomer) .WithShipToAddress(salesOrder.ShipToAddress) .WithShipToContactPerson(salesOrder.ShipToContactPerson) .WithShipToEndCustomer(salesOrder.ShipToEndCustomer) .WithShipToEndCustomerAddress(salesOrder.ShipToEndCustomerAddress) .WithShipToEndCustomerContactPerson(salesOrder.ShipToEndCustomerContactPerson) .WithInvoiceDate(DateTime.UtcNow) .WithSalesChannel(salesOrder.SalesChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.Strategy.Session).SalesInvoice) .WithVatRegime(salesOrder.VatRegime) .WithDiscountAdjustment(salesOrder.DiscountAdjustment) .WithSurchargeAdjustment(salesOrder.SurchargeAdjustment) .WithShippingAndHandlingCharge(salesOrder.ShippingAndHandlingCharge) .WithFee(salesOrder.Fee) .WithCustomerReference(salesOrder.CustomerReference) .WithPaymentMethod(this.PaymentMethod) .Build(); invoiceByOrder.Add(salesOrder, salesInvoice); if (!costsInvoiced) { var costs = this.AppsOnDeriveShippingAndHandlingCharges(derivation); if (costs > 0) { salesInvoice.ShippingAndHandlingCharge = new ShippingAndHandlingChargeBuilder(this.Strategy.Session).WithAmount(costs).Build(); costsInvoiced = true; } } foreach (SalesTerm salesTerm in salesOrder.SalesTerms) { if (salesTerm.GetType().Name == typeof(IncoTerm).Name) { salesInvoice.AddSalesTerm(new IncoTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(InvoiceTerm).Name) { salesInvoice.AddSalesTerm(new InvoiceTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(OrderTerm).Name) { salesInvoice.AddSalesTerm(new OrderTermBuilder(this.strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } } } var amountAlreadyInvoiced = shipmentItem.ShipmentItemBillingsWhereShipmentItem.Sum(v => v.Amount); var leftToInvoice = (orderShipment.OrderItem.QuantityOrdered * orderShipment.OrderItem.ActualUnitPrice) - amountAlreadyInvoiced; if (leftToInvoice > 0) { if (salesOrderItem != null) { var invoiceItem = new SalesInvoiceItemBuilder(this.Strategy.Session) .WithInvoiceItemType(new InvoiceItemTypes(this.Strategy.Session).ProductItem) .WithProduct(salesOrderItem.Product) .WithQuantity(orderShipment.Quantity) .Build(); salesInvoice.AddSalesInvoiceItem(invoiceItem); new ShipmentItemBillingBuilder(this.strategy.Session) .WithQuantity(shipmentItem.Quantity) .WithAmount(leftToInvoice) .WithShipmentItem(shipmentItem) .WithInvoiceItem(invoiceItem) .Build(); } } } } }
public void BaseInvoice(SalesOrderInvoice method) { if (this.CanInvoice) { var salesInvoice = new SalesInvoiceBuilder(this.Strategy.Session) .WithBilledFrom(this.TakenBy) .WithBilledFromContactMechanism(this.TakenByContactMechanism) .WithBilledFromContactPerson(this.TakenByContactPerson) .WithBillToCustomer(this.BillToCustomer) .WithBillToContactMechanism(this.BillToContactMechanism) .WithBillToContactPerson(this.BillToContactPerson) .WithBillToEndCustomer(this.BillToEndCustomer) .WithBillToEndCustomerContactMechanism(this.BillToEndCustomerContactMechanism) .WithBillToEndCustomerContactPerson(this.BillToEndCustomerContactPerson) .WithShipToCustomer(this.ShipToCustomer) .WithShipToAddress(this.ShipToAddress) .WithShipToContactPerson(this.ShipToContactPerson) .WithShipToEndCustomer(this.ShipToEndCustomer) .WithShipToEndCustomerAddress(this.ShipToEndCustomerAddress) .WithShipToEndCustomerContactPerson(this.ShipToEndCustomerContactPerson) .WithDescription(this.Description) .WithStore(this.Store) .WithInvoiceDate(this.Session().Now()) .WithSalesChannel(this.SalesChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.Strategy.Session).SalesInvoice) .WithVatRegime(this.VatRegime) .WithAssignedVatClause(this.DerivedVatClause) .WithDiscountAdjustment(this.DiscountAdjustment) .WithSurchargeAdjustment(this.SurchargeAdjustment) .WithShippingAndHandlingCharge(this.ShippingAndHandlingCharge) .WithFee(this.Fee) .WithCustomerReference(this.CustomerReference) .WithPaymentMethod(this.PaymentMethod) .WithCurrency(this.Currency) .Build(); foreach (SalesOrderItem orderItem in this.ValidOrderItems) { var amountAlreadyInvoiced = orderItem.OrderItemBillingsWhereOrderItem.Sum(v => v.Amount); var leftToInvoice = (orderItem.QuantityOrdered * orderItem.UnitPrice) - amountAlreadyInvoiced; if (leftToInvoice > 0) { var invoiceItem = new SalesInvoiceItemBuilder(this.Strategy.Session) .WithInvoiceItemType(orderItem.InvoiceItemType) .WithAssignedUnitPrice(orderItem.UnitPrice) .WithProduct(orderItem.Product) .WithQuantity(orderItem.CostOfGoodsSold) .WithCostOfGoodsSold(orderItem.QuantityOrdered) .WithAssignedVatRegime(orderItem.AssignedVatRegime) .WithDescription(orderItem.Description) .WithInternalComment(orderItem.InternalComment) .WithMessage(orderItem.Message) .Build(); if (orderItem.ExistSerialisedItem) { invoiceItem.SerialisedItem = orderItem.SerialisedItem; } salesInvoice.AddSalesInvoiceItem(invoiceItem); new OrderItemBillingBuilder(this.Strategy.Session) .WithQuantity(orderItem.QuantityOrdered) .WithAmount(leftToInvoice) .WithOrderItem(orderItem) .WithInvoiceItem(invoiceItem) .Build(); } } foreach (SalesTerm salesTerm in this.SalesTerms) { if (salesTerm.GetType().Name == typeof(IncoTerm).Name) { salesInvoice.AddSalesTerm(new IncoTermBuilder(this.Strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(InvoiceTerm).Name) { salesInvoice.AddSalesTerm(new InvoiceTermBuilder(this.Strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } if (salesTerm.GetType().Name == typeof(OrderTerm).Name) { salesInvoice.AddSalesTerm(new OrderTermBuilder(this.Strategy.Session) .WithTermType(salesTerm.TermType) .WithTermValue(salesTerm.TermValue) .WithDescription(salesTerm.Description) .Build()); } } } }