public string cs_pxGenerarGuiaRemision(string Id) { string archivo_nombre_XML = string.Empty, archivo_nombre_ZIP = string.Empty, archivo_nombre_directorio = string.Empty; try { clsEntityDespatch DespatchDocument = new clsEntityDespatch(localDB).cs_fxObtenerUnoPorId(Id); if (DespatchDocument.Cs_pr_EstadoSUNAT != "1") { string fila = string.Empty; fila = new clsNegocioCEGuiaRemision(localDB).cs_pxGenerarXMLAString(Id); #region Genera el nombre de archivo archivo_nombre_XML = declarante.Cs_pr_Ruc + "-" + "09" + "-" + DespatchDocument.Cs_tag_ID.ToString() + ".xml"; archivo_nombre_ZIP = declarante.Cs_pr_Ruc + "-" + "09" + "-" + DespatchDocument.Cs_tag_ID.ToString() + ".zip"; archivo_nombre_directorio = declarante.Cs_pr_Ruc + "-" + "09" + "-" + DespatchDocument.Cs_tag_ID.ToString(); string documento_ruta = new clsBaseConfiguracion().cs_prRutadocumentosenvio + "/", documento_ruta_nombre = documento_ruta + archivo_nombre_directorio + "\\" + archivo_nombre_XML; if (File.Exists(documento_ruta_nombre)) { File.Delete(documento_ruta_nombre); } if (Directory.Exists(documento_ruta + archivo_nombre_directorio)) { var dir = new DirectoryInfo(documento_ruta + archivo_nombre_directorio); dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly; dir.Delete(true); } if (!Directory.Exists(documento_ruta + archivo_nombre_directorio)) { Directory.CreateDirectory(documento_ruta + archivo_nombre_directorio); } if (!File.Exists(documento_ruta_nombre)) { File.Create(documento_ruta_nombre).Close(); } // StreamWriter sw1 = new StreamWriter(documento_ruta_nombre); sw1.WriteLine(fila); sw1.Close(); fila = string.Empty; StreamWriter sw1 = new StreamWriter(File.Open(documento_ruta_nombre, FileMode.OpenOrCreate), Encoding.GetEncoding("ISO-8859-1")); sw1.WriteLine(fila); sw1.Close(); fila = string.Empty; DirectoryInfo x = new DirectoryInfo(documento_ruta + archivo_nombre_directorio); cs_prComprimirZIP(x); #endregion } return(archivo_nombre_ZIP); } catch (Exception ex) { clsBaseLog.cs_pxRegistarAdd(" clsNegocioCE cs_pxGenerarGuiaRemision " + ex.ToString()); return(null); } }
public override string cs_pxGenerarXMLAString(string Id) { string archivo_xml = string.Empty; try { clsEntityDespatch DespatchDocument = new clsEntityDespatch(localbd).cs_fxObtenerUnoPorId(Id); List <clsEntityDespatch_ShipmentStage> Despatch_ShipStage = new clsEntityDespatch_ShipmentStage(localbd).cs_fxObtenerTodoPorCabeceraId(Id); List <clsEntityDespatch_OrderReference> Despatch_OrderReference = new clsEntityDespatch_OrderReference(localbd).cs_fxObtenerTodoPorCabeceraId(Id); List <clsEntityDespatch_PortLocation> Despatch_PortLocation = new clsEntityDespatch_PortLocation(localbd).cs_fxObtenerTodoPorCabeceraId(Id); List <clsEntityDespatch_Line> Despatch_Line = new clsEntityDespatch_Line(localbd).cs_fxObtenerTodoPorCabeceraId(Id); string fila = ""; string ei = " "; string ef = "\n"; fila += "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"no\"?>" + ef; fila += "<DespatchAdvice " + ef; #region Cabecera fila += ei + "xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2\"" + ef; fila += ei + "xmlns:ext=\"urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2\"" + ef; fila += ei + "xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"" + ef; fila += ei + "xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\"" + ef; fila += ei + "xmlns:sac=\"urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1\"" + ef; fila += ei + "xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\"" + ef; fila += ei + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" + ef; fila += ei + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" + ef; fila += ei + "<ext:UBLExtensions>" + ef; fila += ei + ei + "<ext:UBLExtension><ext:ExtensionContent></ext:ExtensionContent></ext:UBLExtension>" + ef; fila += ei + "</ext:UBLExtensions>" + ef; #endregion fila += ei + "<cbc:UBLVersionID>2.1</cbc:UBLVersionID>" + ef;/*Se encontro que el Documento de Guia de Remision ya esta con la Version 2.1*/ fila += ei + "<cbc:CustomizationID>1.0</cbc:CustomizationID>" + ef; fila += ei + "<cbc:ID>" + DespatchDocument.Cs_tag_ID + "</cbc:ID>" + ef; fila += ei + "<cbc:IssueDate>" + DespatchDocument.Cs_tag_IssueDate + "</cbc:IssueDate>" + ef; fila += ei + "<cbc:DespatchAdviceTypeCode>" + DespatchDocument.Cs_tag_AdviceTypeCode + "</cbc:DespatchAdviceTypeCode>" + ef; fila += ei + "<cbc:Note>" + DespatchDocument.Cs_tag_Note + "</cbc:Note>" + ef; if (Despatch_OrderReference.Count > 0) { foreach (var Despatch_OrderReference_item in Despatch_OrderReference) { fila += ei + "<cac:OrderReference>" + ef; fila += ei + ei + "<cbc:ID>" + Despatch_OrderReference_item.Cs_tag_ID + "</cbc:ID>" + ef; /*if (Despatch_OrderReference_item.Cs_tag_OrderTypeCode != "" && Despatch_OrderReference_item.Cs_tag_OrderTypeCode_Name!="") * { * fila += ei + ei + "<cbc:OrderTypeCode name=\""+Despatch_OrderReference_item.Cs_tag_OrderTypeCode_Name+"\">" + Despatch_OrderReference_item.Cs_tag_OrderTypeCode + "</cbc:OrderTypeCode>" + ef; * }*/ if (Despatch_OrderReference_item.Cs_tag_OrderTypeCode != "") { fila += ei + ei + "<cbc:OrderTypeCode>" + Despatch_OrderReference_item.Cs_tag_OrderTypeCode + "</cbc:OrderTypeCode>" + ef; } fila += ei + "</cac:OrderReference>" + ef; } } if (DespatchDocument.Cs_tag_AdditionalDocumentReference_DocumentTypeCode != "" && DespatchDocument.Cs_tag_AdditionalDocumentReference_ID != "") { fila += ei + "<cac:AdditionalDocumentReference>" + ef; fila += ei + ei + "<cbc:ID>" + DespatchDocument.Cs_tag_AdditionalDocumentReference_ID + "</cbc:ID>" + ef; fila += ei + ei + "<cbc:DocumentTypeCode>" + DespatchDocument.Cs_tag_AdditionalDocumentReference_DocumentTypeCode + "</cbc:DocumentTypeCode>" + ef; fila += ei + "</cac:AdditionalDocumentReference>" + ef; } #region Referencia de la firma digital fila += ei + "<cac:Signature>" + ef; fila += ei + ei + "<cbc:ID>SignatureSP</cbc:ID>" + ef; fila += ei + ei + "<cac:SignatoryParty>" + ef; fila += ei + ei + ei + "<cac:PartyIdentification>" + ef; fila += ei + ei + ei + ei + "<cbc:ID>" + declarante.Cs_pr_Ruc + "</cbc:ID>" + ef; fila += ei + ei + ei + "</cac:PartyIdentification>" + ef; fila += ei + ei + ei + "<cac:PartyName>" + ef; fila += ei + ei + ei + ei + "<cbc:Name><![CDATA[" + "RAZONSOCIALDECERTIFICADO" + "]]></cbc:Name>" + ef; fila += ei + ei + ei + "</cac:PartyName>" + ef; fila += ei + ei + "</cac:SignatoryParty>" + ef; fila += ei + ei + "<cac:DigitalSignatureAttachment>" + ef; fila += ei + ei + ei + "<cac:ExternalReference>" + ef; fila += ei + ei + ei + ei + "<cbc:URI>#SignatureSP</cbc:URI>" + ef; fila += ei + ei + ei + "</cac:ExternalReference>" + ef; fila += ei + ei + "</cac:DigitalSignatureAttachment>" + ef; fila += ei + "</cac:Signature>" + ef; #endregion #region Datos del emisor del documento fila += ei + "<cac:DespatchSupplierParty>" + ef; fila += ei + ei + "<cbc:CustomerAssignedAccountID schemeID=\"" + DespatchDocument.Cs_tag_DespatchSupParty_CustAssigAccountID_SchemeID + "\">" + DespatchDocument.Cs_tag_DespatchSupParty_CustAssigAccountID + "</cbc:CustomerAssignedAccountID>" + ef; fila += ei + ei + "<cac:Party>" + ef; fila += ei + ei + ei + "<cac:PartyLegalEntity>" + ef; fila += ei + ei + ei + ei + "<cbc:RegistrationName><![CDATA[" + DespatchDocument.Cs_tag_DespatchSupParty_PartyLegalEntity + "]]></cbc:RegistrationName>" + ef; fila += ei + ei + ei + "</cac:PartyLegalEntity>" + ef; fila += ei + ei + "</cac:Party>" + ef; fila += ei + "</cac:DespatchSupplierParty>" + ef; fila += ei + "<cac:DeliveryCustomerParty>" + ef; fila += ei + ei + "<cbc:CustomerAssignedAccountID schemeID=\"" + DespatchDocument.Cs_tag_DeliveryCustParty_CustAssigAccountID_SchemeID + "\">" + DespatchDocument.Cs_tag_DeliveryCustParty_CustAssigAccountID + "</cbc:CustomerAssignedAccountID>" + ef; fila += ei + ei + "<cac:Party>" + ef; fila += ei + ei + ei + "<cac:PartyLegalEntity>" + ef; fila += ei + ei + ei + ei + "<cbc:RegistrationName><![CDATA[" + DespatchDocument.Cs_tag_DeliveryCustParty_PartyLegalEntity + "]]></cbc:RegistrationName>" + ef; fila += ei + ei + ei + "</cac:PartyLegalEntity>" + ef; fila += ei + ei + "</cac:Party>" + ef; fila += ei + "</cac:DeliveryCustomerParty>" + ef; fila += ei + "<cac:SellerSupplierParty>" + ef; fila += ei + ei + "<cbc:CustomerAssignedAccountID schemeID=\"" + DespatchDocument.Cs_tag_SellerSupParty_CustAssigAccountID_SchemeID + "\">" + DespatchDocument.Cs_tag_SellerSupParty_CustAssigAccountID + "</cbc:CustomerAssignedAccountID>" + ef; fila += ei + ei + "<cac:Party>" + ef; fila += ei + ei + ei + "<cac:PartyLegalEntity>" + ef; fila += ei + ei + ei + ei + "<cbc:RegistrationName><![CDATA[" + DespatchDocument.Cs_tag_SellerSupParty_PartyLegalEntity + "]]></cbc:RegistrationName>" + ef; fila += ei + ei + ei + "</cac:PartyLegalEntity>" + ef; fila += ei + ei + "</cac:Party>" + ef; fila += ei + "</cac:SellerSupplierParty>" + ef; #endregion #region shipment fila += ei + "<cac:Shipment>" + ef; fila += ei + ei + "<cbc:ID>1</cbc:ID>" + ef; fila += ei + ei + "<cbc:HandlingCode>" + DespatchDocument.Cs_tag_Ship_HandlingCode + "</cbc:HandlingCode>" + ef; fila += ei + ei + "<cbc:Information>" + DespatchDocument.Cs_tag_Ship_Information + "</cbc:Information>" + ef; fila += ei + ei + "<cbc:GrossWeightMeasure unitCode=\"" + DespatchDocument.Cs_tag_Ship_GrossWeightMeasure_UnitCode + "\">" + DespatchDocument.Cs_tag_Ship_GrossWeightMeasure + "</cbc:GrossWeightMeasure>" + ef; if (DespatchDocument.Cs_tag_Ship_TotalTransportHandlingUnitQuantity != "") { fila += ei + ei + "<cbc:TotalTransportHandlingUnitQuantity>" + DespatchDocument.Cs_tag_Ship_TotalTransportHandlingUnitQuantity + "</cbc:TotalTransportHandlingUnitQuantity>" + ef; } fila += ei + ei + "<cbc:SplitConsignmentIndicator>" + DespatchDocument.Cs_tag_Ship_SplitConsignmentIndicador + "</cbc:SplitConsignmentIndicator>" + ef; if (Despatch_ShipStage.Count > 0) { int correlativo = 0; foreach (var Despatch_ShipStage_item in Despatch_ShipStage) { correlativo++; fila += ei + ei + "<cac:ShipmentStage>" + ef; // fila += ei + ei + ei + "<cbc:ID>" + correlativo.ToString() + "</cbc:ID>" + ef; fila += ei + ei + ei + "<cbc:TransportModeCode>" + Despatch_ShipStage_item.Cs_tag_ship_ShipStage_TraModeCode + "</cbc:TransportModeCode>" + ef; fila += ei + ei + ei + "<cac:TransitPeriod>" + ef; fila += ei + ei + ei + ei + "<cbc:StartDate>" + Despatch_ShipStage_item.Cs_tag_ship_ShipStage_TransitPeriod_StartDate + "</cbc:StartDate>" + ef; fila += ei + ei + ei + "</cac:TransitPeriod>" + ef; fila += ei + ei + ei + "<cac:CarrierParty>" + ef; fila += ei + ei + ei + ei + "<cac:PartyIdentification>" + ef; fila += ei + ei + ei + ei + ei + "<cbc:ID schemeID=\"" + Despatch_ShipStage_item.Cs_tag_ship_ShipStage_CarrierParty_PartyID_SchemeID + "\">" + Despatch_ShipStage_item.Cs_tag_ship_ShipStage_CarrierParty_PartyID_ID + "</cbc:ID>" + ef; fila += ei + ei + ei + ei + "</cac:PartyIdentification>" + ef; fila += ei + ei + ei + ei + "<cac:PartyName>" + ef; fila += ei + ei + ei + ei + ei + "<cbc:Name><![CDATA[" + Despatch_ShipStage_item.Cs_tag_ship_ShipStage_CarrierParty_PartyName + "]]></cbc:Name>" + ef; fila += ei + ei + ei + ei + "</cac:PartyName>" + ef; fila += ei + ei + ei + "</cac:CarrierParty>" + ef; fila += ei + ei + ei + "<cac:TransportMeans>" + ef; fila += ei + ei + ei + ei + "<cac:RoadTransport>" + ef; fila += ei + ei + ei + ei + ei + "<cbc:LicensePlateID>" + Despatch_ShipStage_item.Cs_tag_ship_ShipStage_TransportMeans_LicencePlateID + "</cbc:LicensePlateID>" + ef; fila += ei + ei + ei + ei + "</cac:RoadTransport>" + ef; fila += ei + ei + ei + "</cac:TransportMeans>" + ef; List <clsEntityDespatch_ShipmentStage_Driver> ShipStage_Driver = new clsEntityDespatch_ShipmentStage_Driver(localbd).cs_fxObtenerTodoPorCabeceraId(Despatch_ShipStage_item.Cs_pr_Despatch_Shipment_ID); if (ShipStage_Driver.Count > 0) { foreach (var ShipStage_Driver_Item in ShipStage_Driver) { fila += ei + ei + ei + "<cac:DriverPerson>" + ef; fila += ei + ei + ei + ei + "<cbc:ID schemeID=\"" + ShipStage_Driver_Item.Cs_tag_Driver_SchemaID + "\">" + ShipStage_Driver_Item.Cs_tag_Driver_ID + "</cbc:ID>" + ef; fila += ei + ei + ei + "</cac:DriverPerson>" + ef; } } fila += ei + ei + "</cac:ShipmentStage>" + ef; } } fila += ei + ei + "<cac:Delivery>" + ef; fila += ei + ei + ei + "<cac:DeliveryAddress>" + ef; fila += ei + ei + ei + ei + "<cbc:ID>" + DespatchDocument.Cs_tag_Ship_DeliveryAddress_ID + "</cbc:ID>" + ef; fila += ei + ei + ei + ei + "<cbc:StreetName><![CDATA[" + DespatchDocument.Cs_tag_Ship_DeliveryAddress_StreetName + "]]></cbc:StreetName>" + ef; fila += ei + ei + ei + "</cac:DeliveryAddress>" + ef; fila += ei + ei + "</cac:Delivery>" + ef; fila += ei + ei + "<cac:TransportHandlingUnit>" + ef; //fila += ei + ei + ei + "<cac:TransportEquipment>" + ef; fila += ei + ei + ei + "<cbc:ID>" + DespatchDocument.Cs_tag_Ship_TransHandUnit_Equip_ID + "</cbc:ID>" + ef; //fila += ei + ei + ei + "</cac:TransportEquipment>" + ef; fila += ei + ei + "</cac:TransportHandlingUnit>" + ef; fila += ei + ei + "<cac:OriginAddress>" + ef; fila += ei + ei + ei + "<cbc:ID>" + DespatchDocument.Cs_tag_Ship_OriginAddress_ID + "</cbc:ID>" + ef; fila += ei + ei + ei + "<cbc:StreetName><![CDATA[" + DespatchDocument.Cs_tag_Ship_OriginAddress_StreetName + "]]></cbc:StreetName>" + ef; fila += ei + ei + "</cac:OriginAddress>" + ef; if (Despatch_PortLocation.Count > 0) { foreach (var Despatch_PortLocation_Item in Despatch_PortLocation) { fila += ei + ei + "<cac:FirstArrivalPortLocation>" + ef; fila += ei + ei + ei + "<cbc:ID>" + Despatch_PortLocation_Item.Cs_tag_ID + "</cbc:ID>" + ef; fila += ei + ei + "</cac:FirstArrivalPortLocation>" + ef; } } fila += ei + "</cac:Shipment>" + ef; #endregion #region Items if (Despatch_Line != null && Despatch_Line.Count > 0) { try { int linea = 0; foreach (var Line_item in Despatch_Line) { linea++; fila += ei + "<cac:DespatchLine>" + ef; fila += ei + ei + "<cbc:ID>" + linea.ToString() + "</cbc:ID>" + ef; fila += ei + ei + "<cbc:DeliveredQuantity unitCode=\"" + Line_item.Cs_tag_DeliveredQuantity_UnitCode + "\">" + Line_item.Cs_tag_DeliveredQuantity + "</cbc:DeliveredQuantity>" + ef; fila += ei + ei + "<cac:OrderLineReference>" + ef; fila += ei + ei + ei + "<cbc:LineID>" + linea.ToString() + "</cbc:LineID>" + ef; fila += ei + ei + "</cac:OrderLineReference>" + ef; fila += ei + ei + "<cac:Item>" + ef; fila += ei + ei + ei + "<cbc:Name><![CDATA[" + Line_item.Cs_tag_ItemName + "]]></cbc:Name>" + ef; if (Line_item.Cs_tag_Item_SellersItemIdentification_ID != "") { fila += ei + ei + ei + "<cac:SellersItemIdentification>" + ef; fila += ei + ei + ei + ei + "<cbc:ID>" + Line_item.Cs_tag_Item_SellersItemIdentification_ID + "</cbc:ID>" + ef; fila += ei + ei + ei + "</cac:SellersItemIdentification>" + ef; } fila += ei + ei + "</cac:Item>" + ef; fila += ei + "</cac:DespatchLine>" + ef; } } catch (Exception ex) { clsBaseLog.cs_pxRegistarAdd("Error al crear detalle de Guia" + ex.ToString()); } } #endregion fila += "</DespatchAdvice>" + ef; string pfxPath = declarante.Cs_pr_Rutacertificadodigital.Replace("\\\\", "\\"); X509Certificate2 cert = new X509Certificate2(File.ReadAllBytes(pfxPath), declarante.Cs_pr_Parafrasiscertificadodigital); //Cristhian|25/08/2017|FEI2-352 /*Se agrega un metodo de busqueda para ubicar la razon social de la empresa * ya no dependiendo de la ubicacion donde se encuentre, ahora se busca su * etiqueta y se obtine el valor(la razon social)*/ /*NUEVO INICIO*/ string[] subject = cert.SubjectName.Name.Split(','); foreach (string item in subject) { string[] subject_o = item.ToString().Split('='); if (subject_o[0].Trim() == "O") { fila = fila.Replace("RAZONSOCIALDECERTIFICADO", subject_o[1].TrimStart()); } } /*NUEVO FIN*/ XmlDocument documento = new XmlDocument(); documento.PreserveWhitespace = false; documento.LoadXml(fila.Replace("\\\\", "\\")); archivo_xml = FirmarXml(documento, cert); } catch (Exception ex) { //System.Windows.Forms.MessageBox.Show(ex.ToString()); } return(archivo_xml); }