Merhaba,
E-fatura gönderebilmek için edm entegrasyonu yazıyorum. E-fatura göndermek için yazdığım fonksiyon şu şekilde:
{
$xmlStr = '<Invoice ';
$xmlStr .= 'xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" ';
$xmlStr .= 'xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" ';
$xmlStr .= 'xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" ';
$xmlStr .= 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
$xmlStr .= 'xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" ';
$xmlStr .= 'xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 UBL-Invoice-2.1.xsd" ';
$xmlStr .= 'xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">';
$xmlStr .= '<ext:UBLExtensions><ext:UBLExtension><ext:ExtensionContent /></ext:UBLExtension></ext:UBLExtensions>';
$xmlStr .= '<cbc:UBLVersionID>'.self::UBL_VERSION_ID.'</cbc:UBLVersionID>';
$xmlStr .= '<cbc:CustomizationID>'.self::CUSTOMIZATION_ID.'</cbc:CustomizationID>';
$xmlStr .= '<cbc:ProfileID>'.$this->getProfileId().'</cbc:ProfileID>';
// $xmlStr .= '<cbc:ProfileID>'.'TICARIFATURA'.'</cbc:ProfileID>';
if ($this->getId() != '') {
$xmlStr .= '<cbc:ID>'.$this->getId().'</cbc:ID>';
} else {
$xmlStr .= '<cbc:ID />';
}
$xmlStr .= '<cbc:CopyIndicator>'.self::COPY_INDICATOR.'</cbc:CopyIndicator>';
$xmlStr .= '<cbc:UUID>'.$this->getUuid().'</cbc:UUID>';
$xmlStr .= '<cbc:IssueDate>'.$this->getIssueDate().'</cbc:IssueDate>';
$xmlStr .= '<cbc:IssueTime>'.$this->getIssueTime().'</cbc:IssueTime>';
$xmlStr .= '<cbc:InvoiceTypeCode>'.$this->getInvoiceTypeCode().'</cbc:InvoiceTypeCode>';
if (count($this->getNote()) > 0) {
$listNote = $this->getNote();
foreach ($listNote as $k => $v) {
$xmlStr .= '<cbc:Note>'.$v.'</cbc:Note>';
}
}
$xmlStr .= '<cbc:DocumentCurrencyCode>'.$this->getDocumentCurrencyCode().'</cbc:DocumentCurrencyCode>';
$xmlStr .= '<cbc:LineCountNumeric>'.$this->getLineCountNumeric().'</cbc:LineCountNumeric>';
//İrsaliye Varsa Irsaliye Bilgisi Ekleniyor
if (count($this->irsaliye) > 0) {
foreach ($this->irsaliye as $irs) {
$xmlStr .= $irs->readXML();
}
}
//Düzenleyen bilgisi eklendi
$xmlStr .= $this->getDuzenleyen()->readXML();
//Alıcı Bilgisi Eklendi
$xmlStr .= $this->getAlici()->readXML();
//Teslimat Bilgileri Varsa Ekleniyor
if ($this->getTeslimat() != null) {
$this->getTeslimat()->setUlkeKod($this->getDuzenleyen()->getUlkeKod());
$this->getTeslimat()->setUlkeAd($this->getDuzenleyen()->getUlkeAd());
$xmlStr .= $this->getTeslimat()->readXML();
}
//Ödeme Tipi Bilgileri Ekleniyor
if ($this->getOdemeTip() != null) {
$xmlStr .= $this->getOdemeTip()->readXML();
}
/*Dip Toplamdaki Vergiler Okunuyor*/
$lines = $this->getSatirlar();
if (count($lines) > 0) {
$_lineTaxTotals = [];
foreach ($lines as $sno => $satir) {
if (! isset($satir->getVergi()->getVergiOran()[1])) {
dd($satir);
}
if (array_key_exists($satir->getVergi()->getVergiOran()[1], $_lineTaxTotals)) {
$_lineTaxTotals[$satir->getVergi()->getVergiOran()[1]] += $satir->getVergi()->getVergiTutar();
} else {
$_lineTaxTotals[$satir->getVergi()->getVergiOran()[1]] = $satir->getVergi()->getVergiTutar();
}
}
foreach ($_lineTaxTotals as $taxRate => $lineTaxTotal) {
$satir_vergi = new Vergi();
$satir_vergi->setSiraNo(1);
$satir_vergi->setVergiHaricTutar(0);
$satir_vergi->setVergiTutar($lineTaxTotal);
$satir_vergi->setParaBirimKod('TRY');
$satir_vergi->setVergiOran($taxRate);
$satir_vergi->setVergiKod('0015'); //todo refactor
$satir_vergi->setVergiAd('KDV GERCEK');
$xmlStr .= $satir_vergi->readXML();
}
}
$xmlStr .= '<cac:LegalMonetaryTotal>';
$xmlStr .= '<cbc:LineExtensionAmount currencyID="'.$this->getDocumentCurrencyCode().'">'.$this->getSatirToplam().'</cbc:LineExtensionAmount>';
$xmlStr .= '<cbc:TaxExclusiveAmount currencyID="'.$this->getDocumentCurrencyCode().'">'.$this->getVergiHaricToplam().'</cbc:TaxExclusiveAmount>';
$xmlStr .= '<cbc:TaxInclusiveAmount currencyID="'.$this->getDocumentCurrencyCode().'">'.$this->getVergiDahilToplam().'</cbc:TaxInclusiveAmount>';
if ($this->getToplamIskonto() > 0) {
$xmlStr .= '<cbc:AllowanceTotalAmount currencyID="'.$this->getDocumentCurrencyCode().'">'.$this->getToplamIskonto().'</cbc:AllowanceTotalAmount>';
}
$xmlStr .= '<cbc:PayableAmount currencyID="'.$this->getDocumentCurrencyCode().'">'.$this->getOdenecekTutar().'</cbc:PayableAmount>';
$xmlStr .= '</cac:LegalMonetaryTotal>';
//Satırlar Ekleniyor
if (count($lines) > 0) {
foreach ($lines as $satir) {
$xmlStr .= $satir->readXML();
}
}
$xmlStr .= '</Invoice>';
return $xmlStr;
}``
burada "Ubl içeriği hatalı (Schematron hatası) : Geçersiz cbc:ProfileID elemanı değeri : 'TEMELFATURA'. Geçerli cbc:ProfileID değerleri için ProfileIDTypeEarchive listesine bakınız" hatası alıyorum. Araştırdığım kadarıyla ProfileID değerine TEMELFATURA veya TICARIFATURA girmem gerekiyor fakat ikisinde de aynı hatayı alıyorum.
vakit ayırdığınız için teşşekkürler.