Skip to content

Commit

Permalink
add ShipToContact and UlitmateShipToContact / _nodeAsContact
Browse files Browse the repository at this point in the history
add params to AddTradeLineItem to prepare for ChargeFreeQuantity and PackageQuantity testing
  • Loading branch information
PeterSawatzki-MGGM committed Jan 26, 2025
1 parent 937fc26 commit 1ad6e11
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 6 deletions.
29 changes: 25 additions & 4 deletions ZUGFeRD/InvoiceDescriptor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -172,11 +172,13 @@ public class InvoiceDescriptor
/// This party is optional and is written in most profiles except Minimum profile
/// </summary>
public Party ShipTo { get; set; }
public Contact ShipToContact { get; set; }

/// <summary>
/// This party is optional and only relevant for Extended profile
/// </summary>
public Party UltimateShipTo { get; set; }
public Contact UltimateShipToContact { get; set; }

/// <summary>
/// This party is optional and only relevant for Extended profile
Expand Down Expand Up @@ -1208,6 +1210,10 @@ public TradeLineItem AddTradeLineCommentItem(string lineID, string comment, stri
/// <param name="buyerOrderDate"></param>
/// <param name="billingPeriodStart"></param>
/// <param name="billingPeriodEnd"></param>
/// <param name="chargeFreeQuantity"></param>
/// <param name="packageQuantity"></param>
/// <param name="chargeFreeUnitCode"></param>
/// <param name="packageUnitCode"></param>
/// <returns>Returns the instance of the trade line item. You might use this object to add details such as trade allowance charges</returns>
public TradeLineItem AddTradeLineItem(string name,
string description = null,
Expand All @@ -1225,7 +1231,10 @@ public TradeLineItem AddTradeLineItem(string name,
string sellerAssignedID = "", string buyerAssignedID = "",
string deliveryNoteID = "", DateTime? deliveryNoteDate = null,
string buyerOrderLineID = "", string buyerOrderID = "", DateTime? buyerOrderDate = null,
DateTime? billingPeriodStart = null, DateTime? billingPeriodEnd = null)
DateTime? billingPeriodStart = null, DateTime? billingPeriodEnd = null,
decimal? chargeFreeQuantity = null, decimal? packageQuantity = null,
QuantityCodes chargeFreeUnitCode = QuantityCodes.Unknown, QuantityCodes packageUnitCode = QuantityCodes.Unknown
)
{
return AddTradeLineItem(lineID: _getNextLineId(),
name: name,
Expand All @@ -1249,7 +1258,12 @@ public TradeLineItem AddTradeLineItem(string name,
buyerOrderID: buyerOrderID, // Extended!
buyerOrderDate: buyerOrderDate,
billingPeriodStart: billingPeriodStart,
billingPeriodEnd: billingPeriodEnd);
billingPeriodEnd: billingPeriodEnd,
chargeFreeQuantity: chargeFreeQuantity,
packageQuantity: packageQuantity,
chargeFreeUnitCode: chargeFreeUnitCode,
packageUnitCode: packageUnitCode
);
} // !AddTradeLineItem()


Expand All @@ -1274,7 +1288,10 @@ public TradeLineItem AddTradeLineItem(string lineID,
string sellerAssignedID = "", string buyerAssignedID = "",
string deliveryNoteID = "", DateTime? deliveryNoteDate = null,
string buyerOrderLineID = "", string buyerOrderID = "", DateTime? buyerOrderDate = null,
DateTime? billingPeriodStart = null, DateTime? billingPeriodEnd = null)
DateTime? billingPeriodStart = null, DateTime? billingPeriodEnd = null,
decimal? chargeFreeQuantity = null, decimal? packageQuantity = null,
QuantityCodes chargeFreeUnitCode = QuantityCodes.Unknown, QuantityCodes packageUnitCode = QuantityCodes.Unknown
)
{
if (String.IsNullOrWhiteSpace(lineID))
{
Expand Down Expand Up @@ -1305,7 +1322,11 @@ public TradeLineItem AddTradeLineItem(string lineID,
TaxCategoryCode = categoryCode,
TaxPercent = taxPercent,
BillingPeriodStart = billingPeriodStart,
BillingPeriodEnd = billingPeriodEnd
BillingPeriodEnd = billingPeriodEnd,
ChargeFreeQuantity = chargeFreeQuantity,
PackageQuantity = packageQuantity,
ChargeFreeUnitCode = chargeFreeUnitCode,
PackageUnitCode = packageUnitCode
};

if (!String.IsNullOrWhiteSpace(comment))
Expand Down
26 changes: 26 additions & 0 deletions ZUGFeRD/InvoiceDescriptor23CIIReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@ public override InvoiceDescriptor Load(Stream stream)
}

retval.ShipTo = _nodeAsParty(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty", nsmgr);
retval.ShipToContact = _nodeAsContact(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:ShipToTradeParty", nsmgr);
retval.UltimateShipTo = _nodeAsParty(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty", nsmgr);
retval.UltimateShipToContact = _nodeAsContact(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:UltimateShipToTradeParty", nsmgr);
retval.ShipFrom = _nodeAsParty(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty", nsmgr);
retval.ActualDeliveryDate = XmlUtils.NodeAsDateTime(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString", nsmgr);

Expand Down Expand Up @@ -643,6 +645,29 @@ private static LegalOrganization _nodeAsLegalOrganization(XmlNode baseNode, stri
return retval;
}

private static Contact _nodeAsContact(XmlNode baseNode, string xpath, XmlNamespaceManager nsmgr = null)
{
if (baseNode == null)
{
return null;
}

XmlNode node = baseNode.SelectSingleNode(xpath, nsmgr);
if (node == null)
{
return null;
}

Contact retval = new Contact()
{
Name = XmlUtils.NodeAsString(node, "./ram:PersonName", nsmgr),
OrgUnit = XmlUtils.NodeAsString(node, "./ram:DepartmentName", nsmgr),
PhoneNo = XmlUtils.NodeAsString(node, "./ram:TelephoneUniversalCommunication/ram:CompleteNumber", nsmgr),
FaxNo = XmlUtils.NodeAsString(node, "./ram:FaxUniversalCommunication/ram:CompleteNumber", nsmgr),
EmailAddress = XmlUtils.NodeAsString(node, "./ram:EmailURIUniversalCommunication/ram:URIID", nsmgr)
};
return retval;
}

private static Party _nodeAsParty(XmlNode baseNode, string xpath, XmlNamespaceManager nsmgr = null)
{
Expand All @@ -669,6 +694,7 @@ private static Party _nodeAsParty(XmlNode baseNode, string xpath, XmlNamespaceMa
City = XmlUtils.NodeAsString(node, "./ram:PostalTradeAddress/ram:CityName", nsmgr),
Country = default(CountryCodes).FromString(XmlUtils.NodeAsString(node, "./ram:PostalTradeAddress/ram:CountryID", nsmgr)),
SpecifiedLegalOrganization = _nodeAsLegalOrganization(node, "./ram:SpecifiedLegalOrganization", nsmgr),

};

string lineOne = XmlUtils.NodeAsString(node, "./ram:PostalTradeAddress/ram:LineOne", nsmgr);
Expand Down
4 changes: 2 additions & 2 deletions ZUGFeRD/InvoiceDescriptor23CIIWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -750,8 +750,8 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream, ZUGFeRDFo

#region ApplicableHeaderTradeDelivery
Writer.WriteStartElement("ram", "ApplicableHeaderTradeDelivery"); // Pflichteintrag
_writeOptionalParty(Writer, PartyTypes.ShipToTradeParty, this.Descriptor.ShipTo, ALL_PROFILES ^ Profile.Minimum);
_writeOptionalParty(Writer, PartyTypes.UltimateShipToTradeParty, this.Descriptor.UltimateShipTo, Profile.Extended | Profile.XRechnung1 | Profile.XRechnung);
_writeOptionalParty(Writer, PartyTypes.ShipToTradeParty, this.Descriptor.ShipTo, ALL_PROFILES ^ Profile.Minimum, this.Descriptor.ShipToContact);
_writeOptionalParty(Writer, PartyTypes.UltimateShipToTradeParty, this.Descriptor.UltimateShipTo, Profile.Extended | Profile.XRechnung1 | Profile.XRechnung, this.Descriptor.UltimateShipToContact);
_writeOptionalParty(Writer, PartyTypes.ShipFromTradeParty, this.Descriptor.ShipFrom, Profile.Extended);

#region ActualDeliverySupplyChainEvent
Expand Down

0 comments on commit 1ad6e11

Please sign in to comment.