internal static void CreateInvoice(SOInfo soInfo) { int soSysNo = soInfo.SysNo.Value; List <SOPriceMasterInfo> soPriceList = ObjectFactory <ISOPriceDA> .Instance.GetSOPriceBySOSysNo(soSysNo); if (soPriceList != null) { soPriceList.RemoveAll(priceInfo => { return(priceInfo.Status == SOPriceStatus.Deactivate); }); } if (soPriceList == null || soPriceList.Count < 1) { ObjectFactory <SOSendMessageProcessor> .Instance.ElectronicSOPriceNotExists(soInfo); BizExceptionHelper.Throw("SO_CreateInvoice_PriceInfoIsNull"); } List <ECCentral.BizEntity.Invoice.InvoiceMasterInfo> invoiceList = ExternalDomainBroker.GetSOInvoiceMaster(soSysNo); if (invoiceList == null || invoiceList.Count < 1) { SOItemInfo couponItem = soInfo.Items.Find(item => item.ProductType == SOProductType.Coupon); int? couponCodeSysNo = couponItem == null ? null : couponItem.ProductSysNo; SOPriceMasterInfo priceInfo = soPriceList[0]; BizEntity.Invoice.InvoiceInfo invoiceInfo = new BizEntity.Invoice.InvoiceInfo(); invoiceInfo.InvoiceTransactionInfoList = new List <BizEntity.Invoice.InvoiceTransactionInfo>(); invoiceInfo.MasterInfo = new BizEntity.Invoice.InvoiceMasterInfo { CustomerID = soInfo.BaseInfo.CustomerID, CustomerSysNo = soInfo.BaseInfo.CustomerSysNo, SONumber = soSysNo, InvoiceDate = priceInfo.InDate, InvoiceAmt = priceInfo.InvoiceAmount, PayTypeSysNo = soInfo.BaseInfo.PayTypeSysNo, PayTypeName = "", RMANumber = 0, OriginalInvoiceNumber = 0, InvoiceMemo = null, ShippingCharge = priceInfo.ShipPrice, StockSysNo = priceInfo.StockSysNo, OrderDate = soInfo.BaseInfo.CreateTime, DeliveryDate = soInfo.ShippingInfo.DeliveryDate, SalesManSysNo = soInfo.BaseInfo.SalesManSysNo, IsWholeSale = soInfo.BaseInfo.IsWholeSale, IsPremium = soInfo.BaseInfo.IsPremium, PremiumAmt = priceInfo.PremiumAmount, ShipTypeSysNo = soInfo.ShippingInfo.ShipTypeSysNo, ExtraAmt = priceInfo.PayPrice, SOAmt = priceInfo.SOAmount, DiscountAmt = priceInfo.PromotionAmount, GainPoint = priceInfo.GainPoint, PointPaid = -priceInfo.PointPayAmount, PrepayAmt = -priceInfo.PrepayAmount, PromotionAmt = priceInfo.CouponAmount, ReceiveAreaSysNo = soInfo.ReceiverInfo.AreaSysNo, ReceiveContact = soInfo.ReceiverInfo.Name, ReceiveAddress = soInfo.ReceiverInfo.Address, ReceiveCellPhone = soInfo.ReceiverInfo.MobilePhone, ReceivePhone = soInfo.ReceiverInfo.Phone, ReceiveZip = soInfo.ReceiverInfo.Zip, ReceiveName = soInfo.InvoiceInfo.Header, GiftCardPayAmt = -priceInfo.GiftCardPay, InvoiceNo = null, InvoiceType = soInfo.InvoiceInfo.InvoiceType, MerchantSysNo = soInfo.Merchant.SysNo, CompanyCode = soInfo.CompanyCode, PromotionCustomerSysNo = soInfo.BaseInfo.CustomerSysNo, PromotionCodeSysNo = couponCodeSysNo, IsUseChequesPay = false,//soInfo.BaseInfo.IsUseChequesPay, CashPaid = priceInfo.CashPay, }; priceInfo.Items.ForEach(item => { SOItemInfo soItem = soInfo.Items.Find(i => { return(i.ProductSysNo == item.ProductSysNo && i.ProductType == item.ProductType); }); string itemCode = soItem == null ? String.Empty : soItem.ProductID; switch (item.ProductType.Value) { case SOProductType.Coupon: itemCode = String.Format("Promot-{0}", item.ProductSysNo); break; case SOProductType.ExtendWarranty: itemCode = String.Format("{0}E", itemCode); break; } invoiceInfo.InvoiceTransactionInfoList.Add(new BizEntity.Invoice.InvoiceTransactionInfo { ItemCode = itemCode, PrintDescription = item.ProductType.Value.ToEnumDesc(), ItemType = item.ProductType, UnitPrice = item.Price, Quantity = item.Quantity, ExtendPrice = item.Price * item.Quantity, ReferenceSONumber = soSysNo, Weight = soItem.Weight, GainPoint = soItem.GainAveragePoint, PayType = soItem.PayType, PremiumAmt = item.PremiumAmount, ShippingCharge = item.ShipPrice, ExtraAmt = item.PayPrice, CashPaid = item.CashPay, PointPaid = item.PointPayAmount, DiscountAmt = item.PromotionAmount, PrepayAmt = -item.PrepayAmount, Warranty = soItem.Warranty, BriefName = soItem.ProductName, OriginalPrice = soItem.OriginalPrice, PromotionDiscount = item.CouponAmount, MasterProductSysNo = soItem.MasterProductSysNo, UnitCost = soItem.CostPrice, CompanyCode = soInfo.CompanyCode, GiftCardPayAmt = -item.GiftCardPay, UnitCostWithoutTax = soItem.NoTaxCostPrice, ProductSysNo = soItem.ProductSysNo, PriceType = soItem.PriceType, ItemDescription = item.ProductType.Value.ToEnumDesc(), }); }); ExternalDomainBroker.CreateInvoice(invoiceInfo); } }