public virtual Exception Validate(Payment dataItem, decimal?totalAllowanceAmount = null, String remark = null, DateTime?allowanceDate = null) { _payment = dataItem; _totalAllowanceAmount = totalAllowanceAmount ?? _payment.PayoffAmount; _remark = remark; _allowanceDate = allowanceDate ?? DateTime.Now; Exception ex; _seller = null; _newItem = null; if ((ex = CheckBusiness()) != null) { return(ex); } if ((ex = CheckMandatoryFields()) != null) { return(ex); } if ((ex = CheckAllowanceItem()) != null) { return(ex); } return(null); }
public static WebHome.Models.MIG3_1.D0501.CancelAllowance CreateD0501(this InvoiceAllowance item) { InvoiceAllowanceCancellation InvCanlAllow = item.InvoiceAllowanceCancellation; if (InvCanlAllow == null) { return(null); } var result = new WebHome.Models.MIG3_1.D0501.CancelAllowance { CancelAllowanceNumber = item.AllowanceNumber, AllowanceDate = String.Format("{0:yyyyMMdd}", item.AllowanceDate.Value), BuyerId = item.BuyerId, SellerId = item.SellerId, CancelDate = String.Format("{0:yyyyMMdd}", InvCanlAllow.CancelDate.Value), CancelTime = InvCanlAllow.CancelDate.Value, CancelReason = InvCanlAllow.CancelReason, Remark = InvCanlAllow.Remark, }; return(result); }
public static WebHome.Models.MIG3_1.D0401.Allowance CreateD0401(this InvoiceAllowance item) { var result = new WebHome.Models.MIG3_1.D0401.Allowance { Main = new WebHome.Models.MIG3_1.D0401.Main { AllowanceNumber = item.AllowanceNumber, AllowanceDate = String.Format("{0:yyyyMMdd}", item.AllowanceDate), AllowanceType = (WebHome.Models.MIG3_1.D0401.AllowanceTypeEnum)((int)item.AllowanceType), Buyer = new WebHome.Models.MIG3_1.D0401.MainBuyer { Address = string.IsNullOrEmpty(item.InvoiceAllowanceBuyer.Address)? "": item.InvoiceAllowanceBuyer.Address.Length > 100? item.InvoiceAllowanceBuyer.Address.Substring(0, 100): item.InvoiceAllowanceBuyer.Address, //CustomerNumber = item.InvoiceAllowanceBuyer.CustomerName, EmailAddress = "",//item.InvoiceAllowanceBuyer.EMail, FacsimileNumber = String.IsNullOrEmpty(item.InvoiceAllowanceBuyer.Fax)? "": item.InvoiceAllowanceBuyer.Fax.Length > 26? item.InvoiceAllowanceBuyer.Fax.Substring(0, 26): item.InvoiceAllowanceBuyer.Fax, Identifier = item.InvoiceAllowanceBuyer.ReceiptNo, Name = item.InvoiceAllowanceBuyer.IsB2C() ? Encoding.GetEncoding(950).GetBytes(item.InvoiceAllowanceBuyer.Name.InsteadOfNullOrEmpty("")).Length == 4 ? item.InvoiceAllowanceBuyer.Name : ValueValidity.GenerateRandomCode(4) : String.IsNullOrEmpty(item.InvoiceAllowanceBuyer.Name) ? item.InvoiceAllowanceBuyer.ReceiptNo : item.InvoiceAllowanceBuyer.Name, PersonInCharge = String.IsNullOrEmpty(item.InvoiceAllowanceBuyer.PersonInCharge)? "": item.InvoiceAllowanceBuyer.PersonInCharge.Length > 30? item.InvoiceAllowanceBuyer.PersonInCharge.Substring(0, 30): item.InvoiceAllowanceBuyer.PersonInCharge, RoleRemark = item.InvoiceAllowanceBuyer.RoleRemark, TelephoneNumber = "",//item.InvoiceAllowanceBuyer.Phone, }, Seller = new WebHome.Models.MIG3_1.D0401.MainSeller { Address = String.IsNullOrEmpty(item.InvoiceAllowanceSeller.Address)? "": item.InvoiceAllowanceSeller.Address.Length > 100 ? item.InvoiceAllowanceSeller.Address.Substring(0, 100) : item.InvoiceAllowanceSeller.Address, //CustomerNumber = item.InvoiceAllowanceSeller.CustomerName, EmailAddress = "",//item.InvoiceAllowanceSeller.EMail, FacsimileNumber = String.IsNullOrEmpty(item.InvoiceAllowanceSeller.Fax)? "": item.InvoiceAllowanceSeller.Fax.Length > 26? item.InvoiceAllowanceSeller.Fax.Substring(0, 26): item.InvoiceAllowanceSeller.Fax, Identifier = item.InvoiceAllowanceSeller.ReceiptNo, Name = item.InvoiceAllowanceSeller.Name, PersonInCharge = String.IsNullOrEmpty(item.InvoiceAllowanceSeller.PersonInCharge)? "": item.InvoiceAllowanceSeller.PersonInCharge.Length > 30? item.InvoiceAllowanceSeller.PersonInCharge.Substring(0, 30): item.InvoiceAllowanceSeller.PersonInCharge, RoleRemark = item.InvoiceAllowanceSeller.RoleRemark, TelephoneNumber = "",//item.InvoiceAllowanceSeller.Phone, }, }, Amount = new WebHome.Models.MIG3_1.D0401.Amount { TaxAmount = item.TaxAmount.HasValue ? (long)item.TaxAmount.Value : 0, TotalAmount = item.TotalAmount.HasValue ? (long)item.TotalAmount.Value : 0, }, }; result.Details = item.InvoiceAllowanceDetails.Select(d => new WebHome.Models.MIG3_1.D0401.DetailsProductItem { AllowanceSequenceNumber = d.InvoiceAllowanceItem.No.ToString(), Amount = d.InvoiceAllowanceItem.Amount.HasValue ? d.InvoiceAllowanceItem.Amount.Value : 0m, OriginalDescription = d.InvoiceAllowanceItem.OriginalDescription, OriginalInvoiceDate = String.Format("{0:yyyyMMdd}", d.InvoiceAllowanceItem.InvoiceDate), OriginalInvoiceNumber = d.InvoiceAllowanceItem.InvoiceNo, OriginalSequenceNumber = d.InvoiceAllowanceItem.OriginalSequenceNo.HasValue ? d.InvoiceAllowanceItem.OriginalSequenceNo.Value.ToString() : "1", Quantity = d.InvoiceAllowanceItem.Piece.HasValue ? d.InvoiceAllowanceItem.Piece.Value : 0.00000M, Tax = (long)d.InvoiceAllowanceItem.Tax.Value, TaxType = (WebHome.Models.MIG3_1.D0401.DetailsProductItemTaxType)(int) d.InvoiceAllowanceItem.TaxType, Unit = d.InvoiceAllowanceItem.PieceUnit, UnitPrice = d.InvoiceAllowanceItem.UnitCost.HasValue ? d.InvoiceAllowanceItem.UnitCost.Value : 0, }).ToArray(); return(result); }
protected virtual Exception CheckAllowanceItem() { _productItems = new List <InvoiceAllowanceItem>(); var invTable = _mgr.GetTable <InvoiceItem>(); InvoiceItem originalInvoice = _payment.InvoiceItem; if (originalInvoice == null) { return(new Exception("發票資料不存在!!")); } if (originalInvoice.InvoiceCancellation != null) { return(new Exception("該發票已作廢,不可折讓。")); } InvoiceAllowanceItem allowanceItem; if (originalInvoice.InvoiceType == (int)Naming.InvoiceTypeDefinition.一般稅額計算之電子發票) { allowanceItem = new InvoiceAllowanceItem { Amount = Math.Round(_totalAllowanceAmount.Value / 1.05m), InvoiceNo = originalInvoice.TrackCode + originalInvoice.No, InvoiceDate = originalInvoice.InvoiceDate, ItemNo = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().ItemNo, OriginalSequenceNo = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().No, Piece = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().Piece, PieceUnit = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().PieceUnit, OriginalDescription = originalInvoice.InvoiceDetails.First().InvoiceProduct.Brief, TaxType = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().TaxType, No = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().No, UnitCost = originalInvoice.InvoiceAmountType.TotalAmount, //originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().UnitCost, Remark = _remark, }; } else { allowanceItem = new InvoiceAllowanceItem { Amount = Math.Round(_totalAllowanceAmount.Value / 1.05m), InvoiceNo = originalInvoice.TrackCode + originalInvoice.No, InvoiceDate = originalInvoice.InvoiceDate, //ItemNo = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().ItemNo, //OriginalSequenceNo = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().No, //Piece = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().Piece, //PieceUnit = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().PieceUnit, //OriginalDescription = originalInvoice.InvoiceDetails.First().InvoiceProduct.Brief, //TaxType = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().TaxType, //No = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().No, //UnitCost = originalInvoice.InvoiceDetails.First().InvoiceProduct.InvoiceProductItem.First().UnitCost, Remark = _remark, }; } allowanceItem.Tax = _totalAllowanceAmount - allowanceItem.Amount; _productItems.Add(allowanceItem); _newItem = new InvoiceAllowance() { Document = new Document { DocDate = DateTime.Now, DocType = (int)Naming.DocumentTypeDefinition.E_Allowance }, AllowanceDate = _allowanceDate, AllowanceNumber = originalInvoice.TrackCode + originalInvoice.No, AllowanceType = 1, InvoiceID = originalInvoice.InvoiceID, BuyerId = originalInvoice.InvoiceBuyer.ReceiptNo, SellerId = _seller.ReceiptNo, TaxAmount = allowanceItem.Tax, TotalAmount = allowanceItem.Amount, //InvoiceID = invTable.Where(i=>i.TrackCode + i.No == item.AllowanceItem.Select(a=>a.OriginalInvoiceNumber).FirstOrDefault()).Select(i=>i.InvoiceID).FirstOrDefault(), InvoiceAllowanceBuyer = new InvoiceAllowanceBuyer { Name = originalInvoice.InvoiceBuyer.Name, ReceiptNo = originalInvoice.InvoiceBuyer.ReceiptNo, CustomerID = originalInvoice.InvoiceBuyer.CustomerID, ContactName = originalInvoice.InvoiceBuyer.ContactName, CustomerName = originalInvoice.InvoiceBuyer.CustomerName }, InvoiceAllowanceSeller = new InvoiceAllowanceSeller { Name = _seller.CompanyName, ReceiptNo = _seller.ReceiptNo, Address = _seller.Addr, ContactName = _seller.ContactName, CustomerName = _seller.CompanyName, EMail = _seller.ContactEmail, Fax = _seller.Fax, Phone = _seller.Phone, PersonInCharge = _seller.UndertakerName, SellerID = _seller.CompanyID, } }; _newItem.InvoiceAllowanceDetails.AddRange(_productItems.Select(p => new InvoiceAllowanceDetails { InvoiceAllowanceItem = p, })); _payment.InvoiceAllowance = _newItem; return(null); }