package SUNAT::UBL::VoidDocuments;


use lib qw(../);
use Data::Dump qw();
use File::Path qw( make_path rmtree );


=head1 NAME

SUNAT::VoidDocuments - Generacion de XML Comunicacion de Baja

=head1 VERSION

Version 2.0

=head2 new($vdObj)

donde $vdObj debe de tener la estructura siguiente:

{
  cab => {
           cp_emision_fecha => "2018-10-24",
           cp_motivo        => "CANCELACION",
           cp_numero        => 253,
           cp_serie         => "F017",
           cp_tipo          => "01",
           ra_emision_fecha => "2018-10-24",
           ra_numero        => 1,
         },
  emi => {
           id_emisor       => 20539472390,
           nombrecomercial => "EDDAS HG",
           razonsocial     => "EDDAS HOLDING GROUP S.A.C.",
         },
}

=cut 

sub new
{
my $class = shift;  
my ($vd) = (@_);

my $self = {};
bless( $self, $class ); 
$self->{UBLtype} = 'VoidDocuments';
$self->{_srcObj} = $vd;

#Carga el Documento template
$self->{_xml} ='';
$self->{emisor_ruc} = $self->{_srcObj}{emi}{id_emisor};

my @lines = <DATA>;
foreach (@lines) {$self->{_xml} .= $_;}


#genera el numero de id
my $id_ra = $vd->{cab}{ra_numero};
for(my $x=0;(length $id_ra)<5;$x++)
{
	$id_ra = '0'.$id_ra;
}
$vd->{cab}{ra_emision_fecha}=~m/(.*)-(.*)-(.*)/;
$self->{ID_RA} = "RA-$1$2$3-$id_ra";


#REALIZA LOS REEMPLAZOS
$self->{_xml} =~s/%IDRA%/$self->{ID_RA}/ig;
$self->{_xml} =~s/%RUC%/$vd->{emi}{id_emisor}/ig;
$self->{_xml} =~s/%RSOCIAL%/$vd->{emi}{razonsocial}/ig;
$self->{_xml} =~s/%ISSDATE%/$vd->{cab}{ra_emision_fecha}/ig;
$self->{_xml} =~s/%REFDATE%/$vd->{cab}{cp_emision_fecha}/ig;
$self->{_xml} =~s/%CPTIPO%/$vd->{cab}{cp_tipo}/ig;
$self->{_xml} =~s/%CPSERIE%/$vd->{cab}{cp_serie}/ig;
$self->{_xml} =~s/%CPNUMERO%/$vd->{cab}{cp_numero}/ig;
$self->{_xml} =~s/%CPMOTIVO%/$vd->{cab}{cp_motivo}/ig;

return $self; 
}

=head2 toXMLString()

Obtiene el XML

=cut

sub toXMLString
{
 my $self = shift;
 return $self->{_xml};
}
return 1;



=head2 saveXML($dirname)  guarda el fichero en el directorio 

Guarda el fichero en el directorio en formato XML devuelve el nombre de fichero sin firmar

=cut

sub saveXML
{
 my $self = shift;
 my ($dirname) = (@_);
 if($dirname eq '') {return undef;}
 if($dirname =~m/\/$/){$dirname = $dirname.'/';}

 $dirname= $dirname.$self->{_srcObj}{emi}{id_emisor}.'/';
 $filename = $self->{emisor_ruc}.'-'.$self->{ID_RA};

 if(! -e $dirname)
  {
	make_path $dirname;
  }

	open my $fh, '>', $dirname.$filename.'.XML' or die $!;
	binmode $fh;
	print $fh $self->{_xml};
	close $fh;

  if(-e $dirname.$filename.'.XML')
  {
  	return $filename;
  }
  else
  {
  	return undef;
  }
}




__DATA__
<?xml version="1.0"?>
<VoidedDocuments 
xmlns="urn:sunat:names:specification:ubl:peru:schema:xsd:VoidedDocuments-1" 
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" 
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" 
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" 
xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <ext:UBLExtensions><ext:UBLExtension><ext:ExtensionContent>
</ext:ExtensionContent></ext:UBLExtension></ext:UBLExtensions>
 <cbc:UBLVersionID>2.0</cbc:UBLVersionID>
 <cbc:CustomizationID>1.0</cbc:CustomizationID>
 <cbc:ID>%IDRA%</cbc:ID>
 <cbc:ReferenceDate>%REFDATE%</cbc:ReferenceDate>
 <cbc:IssueDate>%ISSDATE%</cbc:IssueDate>
 <cac:Signature>
	 <cbc:ID>signEDDAS</cbc:ID>
	 <cac:SignatoryParty>
		 <cac:PartyIdentification>
		 	<cbc:ID>%RUC%</cbc:ID>
		 </cac:PartyIdentification>
		 <cac:PartyName>
		 	<cbc:Name>%RSOCIAL%</cbc:Name>
		 </cac:PartyName>
	 </cac:SignatoryParty>
	 <cac:DigitalSignatureAttachment>
		 <cac:ExternalReference>
		 	<cbc:URI>#signEDDAS</cbc:URI>
		 </cac:ExternalReference>
	 </cac:DigitalSignatureAttachment>
 </cac:Signature>
 <cac:AccountingSupplierParty>
	 <cbc:CustomerAssignedAccountID>%RUC%</cbc:CustomerAssignedAccountID>
	 <cbc:AdditionalAccountID>6</cbc:AdditionalAccountID>
	 <cac:Party>
		 <cac:PartyLegalEntity>
		 	<cbc:RegistrationName>%RSOCIAL%</cbc:RegistrationName>
		 </cac:PartyLegalEntity>
	 </cac:Party>
 </cac:AccountingSupplierParty>
 <sac:VoidedDocumentsLine>
	 <cbc:LineID>1</cbc:LineID>
	 <cbc:DocumentTypeCode>%CPTIPO%</cbc:DocumentTypeCode>
	 <sac:DocumentSerialID>%CPSERIE%</sac:DocumentSerialID>
	 <sac:DocumentNumberID>%CPNUMERO%</sac:DocumentNumberID>
	 <sac:VoidReasonDescription>%CPMOTIVO%</sac:VoidReasonDescription>
 </sac:VoidedDocumentsLine>
</VoidedDocuments>