giansalex/greenter

View on GitHub
packages/xml/src/Xml/Templates/despatch.xml.twig

Summary

Maintainability
Test Coverage
{% apply spaceless %}
<?xml version="1.0" encoding="utf-8"?>
<DespatchAdvice xmlns="urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2">
    <ext:UBLExtensions>
        <ext:UBLExtension>
            <ext:ExtensionContent/>
        </ext:UBLExtension>
    </ext:UBLExtensions>
    <cbc:UBLVersionID>2.1</cbc:UBLVersionID>
    <cbc:CustomizationID>1.0</cbc:CustomizationID>
    <cbc:ID>{{ doc.serie }}-{{ doc.correlativo }}</cbc:ID>
    <cbc:IssueDate>{{ doc.fechaEmision|date('Y-m-d') }}</cbc:IssueDate>
    <cbc:IssueTime>{{ doc.fechaEmision|date('H:i:s') }}</cbc:IssueTime>
    <cbc:DespatchAdviceTypeCode>{{ doc.tipoDoc }}</cbc:DespatchAdviceTypeCode>
    {% if doc.observacion %}
    <cbc:Note><![CDATA[{{ doc.observacion|raw }}]]></cbc:Note>
    {% endif %}
    {% if doc.docBaja %}
    <cac:OrderReference>
        <cbc:ID>{{ doc.docBaja.nroDoc }}</cbc:ID>
        <cbc:OrderTypeCode listAgencyName="PE:SUNAT" listName="SUNAT:Identificador de Tipo de Documento" listURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo01">{{ doc.docBaja.tipoDoc }}</cbc:OrderTypeCode>
    </cac:OrderReference>
    {% endif %}
    {% if doc.relDoc %}
    <cac:AdditionalDocumentReference>
        <cbc:ID>{{ doc.relDoc.nroDoc }}</cbc:ID>
        <cbc:DocumentTypeCode listAgencyName="PE:SUNAT" listName="SUNAT:Identificador de documento relacionado" listURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo21">{{ doc.relDoc.tipoDoc }}</cbc:DocumentTypeCode>
    </cac:AdditionalDocumentReference>
    {% endif %}
    {% set emp = doc.company %}
        <cac:Signature>
        <cbc:ID>{{ emp.ruc }}</cbc:ID>
        <cac:SignatoryParty>
            <cac:PartyIdentification>
                <cbc:ID>{{ emp.ruc }}</cbc:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <cbc:Name><![CDATA[{{ emp.razonSocial|raw }}]]></cbc:Name>
            </cac:PartyName>
        </cac:SignatoryParty>
        <cac:DigitalSignatureAttachment>
            <cac:ExternalReference>
                <cbc:URI>#GREENTER-SIGN</cbc:URI>
            </cac:ExternalReference>
        </cac:DigitalSignatureAttachment>
    </cac:Signature>
    <cac:DespatchSupplierParty>
        <cbc:CustomerAssignedAccountID schemeID="6">{{ emp.ruc }}</cbc:CustomerAssignedAccountID>
        <cac:Party>
            <cac:PartyLegalEntity>
                <cbc:RegistrationName><![CDATA[{{ emp.razonSocial|raw }}]]></cbc:RegistrationName>
            </cac:PartyLegalEntity>
        </cac:Party>
    </cac:DespatchSupplierParty>
    <cac:DeliveryCustomerParty>
        <cbc:CustomerAssignedAccountID schemeID="{{ doc.destinatario.tipoDoc }}">{{ doc.destinatario.numDoc }}</cbc:CustomerAssignedAccountID>
        <cac:Party>
            <cac:PartyLegalEntity>
                <cbc:RegistrationName><![CDATA[{{ doc.destinatario.rznSocial|raw }}]]></cbc:RegistrationName>
            </cac:PartyLegalEntity>
        </cac:Party>
    </cac:DeliveryCustomerParty>
    {% if doc.tercero %}
    <cac:SellerSupplierParty>
        <cbc:CustomerAssignedAccountID schemeID="{{ doc.tercero.tipoDoc }}">{{ doc.tercero.numDoc }}</cbc:CustomerAssignedAccountID>
        <cac:Party>
            <cac:PartyLegalEntity>
                <cbc:RegistrationName><![CDATA[{{ doc.tercero.rznSocial|raw }}]]></cbc:RegistrationName>
            </cac:PartyLegalEntity>
        </cac:Party>
    </cac:SellerSupplierParty>
    {% endif %}
    {% set envio = doc.envio %}
    <cac:Shipment>
        <cbc:ID>1</cbc:ID>
        <cbc:HandlingCode>{{ envio.codTraslado }}</cbc:HandlingCode>
        {% if envio.desTraslado %}
        <cbc:Information>{{ envio.desTraslado }}</cbc:Information>
        {% endif %}
        <cbc:GrossWeightMeasure unitCode="{{ envio.undPesoTotal }}">{{ envio.pesoTotal|n_format(3) }}</cbc:GrossWeightMeasure>
        {% if envio.numBultos %}
        <cbc:TotalTransportHandlingUnitQuantity>{{ envio.numBultos }}</cbc:TotalTransportHandlingUnitQuantity>
        {% endif %}
        <cbc:SplitConsignmentIndicator>{{ envio.indTransbordo ? "true" : "false" }}</cbc:SplitConsignmentIndicator>
        <cac:ShipmentStage>
            <cbc:TransportModeCode>{{ envio.modTraslado }}</cbc:TransportModeCode>
            <cac:TransitPeriod>
                <cbc:StartDate>{{ envio.fecTraslado|date('Y-m-d') }}</cbc:StartDate>
            </cac:TransitPeriod>
            {% if envio.transportista %}
            <cac:CarrierParty>
                <cac:PartyIdentification>
                    <cbc:ID schemeID="{{ envio.transportista.tipoDoc }}">{{ envio.transportista.numDoc }}</cbc:ID>
                </cac:PartyIdentification>
                <cac:PartyName>
                    <cbc:Name><![CDATA[{{ envio.transportista.rznSocial|raw }}]]></cbc:Name>
                </cac:PartyName>
            </cac:CarrierParty>
            <cac:TransportMeans>
                <cac:RoadTransport>
                    <cbc:LicensePlateID>{{ envio.transportista.placa }}</cbc:LicensePlateID>
                </cac:RoadTransport>
            </cac:TransportMeans>
            <cac:DriverPerson>
                <cbc:ID schemeID="{{ envio.transportista.choferTipoDoc }}">{{ envio.transportista.choferDoc }}</cbc:ID>
            </cac:DriverPerson>
            {% endif %}
        </cac:ShipmentStage>
        <cac:Delivery>
            <cac:DeliveryAddress>
                <cbc:ID>{{ envio.llegada.ubigueo }}</cbc:ID>
                <cbc:StreetName>{{ envio.llegada.direccion }}</cbc:StreetName>
            </cac:DeliveryAddress>
        </cac:Delivery>
        {% if envio.numContenedor %}
        <cac:TransportHandlingUnit>
            <cbc:ID>{{ envio.numContenedor }}</cbc:ID>
        </cac:TransportHandlingUnit>
        {% endif %}
        <cac:OriginAddress>
            <cbc:ID>{{ envio.partida.ubigueo }}</cbc:ID>
            <cbc:StreetName>{{ envio.partida.direccion }}</cbc:StreetName>
        </cac:OriginAddress>
        {% if envio.codPuerto %}
        <cac:FirstArrivalPortLocation>
            <cbc:ID>{{ envio.codPuerto }}</cbc:ID>
        </cac:FirstArrivalPortLocation>
        {% endif %}
    </cac:Shipment>
    {% for det in doc.details %}
    <cac:DespatchLine>
        <cbc:ID>{{ loop.index }}</cbc:ID>
        <cbc:DeliveredQuantity unitCode="{{ det.unidad }}">{{ det.cantidad }}</cbc:DeliveredQuantity>
        <cac:OrderLineReference>
            <cbc:LineID>{{ loop.index }}</cbc:LineID>
        </cac:OrderLineReference>
        <cac:Item>
            <cbc:Name><![CDATA[{{ det.descripcion|raw }}]]></cbc:Name>
            <cac:SellersItemIdentification>
                <cbc:ID>{{ det.codigo }}</cbc:ID>
            </cac:SellersItemIdentification>
            {% if det.codProdSunat %}
                <cac:CommodityClassification>
                    <cbc:ItemClassificationCode listID="UNSPSC" listAgencyName="GS1 US" listName="Item Classification">{{ det.codProdSunat }}</cbc:ItemClassificationCode>
                </cac:CommodityClassification>
            {% endif %}
        </cac:Item>
    </cac:DespatchLine>
    {% endfor %}
</DespatchAdvice>
{% endapply %}