date_from = $date->format ( "Y-m-01" );
$this->date_to = $date->format ( "Y-m-t" );
$this->db = $GLOBALS ['db'];
$this->optimaXML = $optimaXML;
}
public function loadXmlObject() {
$this->optimaXML->generateStartXMl ()->loadXml ();
}
public function addInvoiceDocuments() {
global $app_list_strings;
$this->getInvoicesObject ();
$payment_methods = $app_list_strings ['payment_method_dom'];
$fpn = new SimpleXMLElement ( '' );
$fpn->addChild ( 'WERSJA', OptimaXMLConstant::WERSJA );
$fpn->addChild ( 'BAZA_ZRD_ID', OptimaXMLConstant::BAZA_ZRD_ID );
$fpn->addChild ( 'BAZA_DOC_ID', OptimaXMLConstant::BAZA_DOC_ID );
foreach ( $this->getInvoicesObject () as $value ) {
$fpn = $this->addInvoiceDocument ( $value, $fpn );
}
$this->xml_adopt ( $this->optimaXML->basicXML, $fpn );
echo $this->optimaXML->basicXML->asXML ();
}
public function addInvoiceDocument($value, $fpn) {
$header = new SimpleXMLElement ( '' );
$fpe = $header->addChild ( 'REJESTR_SPRZEDAZY_VAT' );
$this->addIfNotEmpty ( $fpe, 'ID_ZRODLA', $value->id );
$this->addIfNotEmpty ( $fpe, 'MODUL', 'HANDEL' );
$this->addIfNotEmpty ( $fpe, 'REJESTR', 'REJESTR SPRZEDAŻY VAT' );
$this->addIfNotEmpty ( $fpe, 'DATA_WYSTAWIENIA', date ( "Y-m-d", strtotime ( $value->register_date ) ) );
$this->addIfNotEmpty ( $fpe, 'DATA_SPRZEDAZY', date ( "Y-m-d", strtotime ( $value->sell_date ) ) );
$this->addIfNotEmpty ( $fpe, 'TERMIN', date ( "Y-m-d", strtotime ( $value->payment_date ) ) );
$this->addIfNotEmpty ( $fpe, 'DATA_DATAOBOWIAZKUPODATKOWEGO', date ( "Y-m-d", strtotime ( $value->register_date ) ) );
$this->addIfNotEmpty ( $fpe, 'DATA_DATAPRAWAODLICZENIA', date ( "Y-m-d", strtotime ( $value->register_date ) ) );
$this->addIfNotEmpty ( $fpe, 'NUMER', $value->document_no );
$this->addIfNotEmpty ( $fpe, 'KOREKTA', ($value->type == 'normal' ? 'Nie' : 'Tak') );
if ($value->type == 'correct') {
$cor = new EcmInvoiceOut ();
$cor->retrieve ( $value->ecminvoiceout_id );
$this->addIfNotEmpty ( $fpe, 'KOREKTA_NUMER', $cor->document_no );
}
$this->addIfNotEmpty ( $fpe, 'WEWNETRZNA', 'Nie' );
$this->addIfNotEmpty ( $fpe, 'METODA_KASOWA', 'Nie' );
$this->addIfNotEmpty ( $fpe, 'FISKALNA', 'Nie' );
$this->addIfNotEmpty ( $fpe, 'DETALICZNA', 'Nie' );
if ($value->pdf_type == 'K') {
$dek_7 = date ( "Y-m", strtotime ( $value->register_date ) );
$dek_ue = "Nie";
$export = 'nie';
} else if ($value->pdf_type == 'U') {
$dek_7 = "";
$dek_ue = 'Tak';
$export = 'wewnątrzunijny';
} else if ($value->pdf_type == 'E') {
$export = 'tak';
$dek_7 = date ( "Y-m", strtotime ( $value->register_date ) );
$dek_ue = 'Nie';
}
$this->addIfNotEmpty ( $fpe, 'EKSPORT', $export );
$acc = new Account ();
$acc->retrieve ( $value->parent_id );
$this->addIfNotEmpty ( $fpe, 'FINALNY', ($acc->natural_person ? 'Tak' : 'Nie') );
$this->addIfNotEmpty ( $fpe, 'PODATNIK_CZYNNY', ($acc->vat_payer ? 'Tak' : 'Nie') );
$this->addIfNotEmpty ( $fpe, 'TYP_PODMIOTU', 'kontrahent' );
$this->addIfNotEmpty ( $fpe, 'PODMIOT', $acc->index_dbf );
$this->addIfNotEmpty ( $fpe, 'PODMIOT_ID', $acc->id );
$this->addIfNotEmpty ( $fpe, 'PODMIOT_NIP', $acc->to_vatid );
$acc_name = $acc->name;
if (strlen ( $acc_name ) > 50) {
$this->addIfNotEmpty ( $fpe, 'NAZWA1', substr ( $acc_name, 0, 50 ) );
if (strlen ( $acc_name ) > 100) {
$this->addIfNotEmpty ( $fpe, 'NAZWA2', substr ( $acc_name, 50, 50 ) );
$this->addIfNotEmpty ( $fpe, 'NAZWA3', substr ( $acc_name, 100 ) );
} else {
$this->addIfNotEmpty ( $fpe, 'NAZWA2', substr ( $acc_name, 50 ) );
}
} else {
$this->addIfNotEmpty ( $fpe, 'NAZWA1', $acc_name );
}
if ($acc->invoice_type == "K") {
$this->addIfNotEmpty ( $fpe, 'NIP_KRAJ', 'PL' );
} else {
$this->addIfNotEmpty ( $fpe, 'NIP_KRAJ', substr ( $acc->to_vatid, 0, 2 ) );
}
$this->addIfNotEmpty ( $fpe, 'NIP', $acc->to_vatid );
preg_match ( '/^([^\d]*[^\d\s]) *(\d.*)$/', $acc->register_address_street, $matches );
$this->addIfNotEmpty ( $fpe, 'KRAJ', $acc->register_address_country );
$this->addIfNotEmpty ( $fpe, 'WOJEWÓDZTWO', $acc->register_address_state );
// $fpe->addChild('POWIAT',$acc->to_vatid);
$this->addIfNotEmpty ( $fpe, 'GMINA', $acc->register_address_ecmcommune_name );
$this->addIfNotEmpty ( $fpe, 'ULICA', $matches [1] );
$numbers = $this->findHomeAndLocale ( $matches [2] );
$this->addIfNotEmpty ( $fpe, 'NR_DOMU', $numbers [0] );
$this->addIfNotEmpty ( $fpe, 'NR_LOKALU', $numbers [1] );
$this->addIfNotEmpty ( $fpe, 'MIASTO', $acc->register_address_city );
$this->addIfNotEmpty ( $fpe, 'KOD_POCZTOWY', $acc->register_address_postalcode );
$this->addIfNotEmpty ( $fpe, 'DEKLARACJA_VAT7', $dek_7 );
$this->addIfNotEmpty ( $fpe, 'DEKLARACJA_VATUE', $dek_ue );
if ($value->currency_id==null) {
$cur = new Currency ();
$cur->retrieve ( $value->currency_id );
$date = $this->getCurrencyDate ( $value->currency_table, $cur->id );
$this->addIfNotEmpty ( $fpe, 'WALUTA', $cur->name );
$this->addIfNotEmpty ( $fpe, 'KURS_WALUTY', '--' . $value->currency_value_nbp );
$this->addIfNotEmpty ( $fpe, 'DATA_KURSU', date ( "Y-m-d", strtotime ( $date ) ) );
$this->addIfNotEmpty ( $fpe, 'NOTOWANIE_WALUTY_ILE', $value->currency_value_nbp );
$this->addIfNotEmpty ( $fpe, 'NOTOWANIE_WALUTY_ZA_ILE', $value->currency_value_nbp );
$this->addIfNotEmpty ( $fpe, 'KURS_DO_KSIEGOWANIA', 'Nie' );
} else {
$this->addIfNotEmpty ( $fpe, 'WALUTA', 'PLN' );
$this->addIfNotEmpty ( $fpe, 'KURS_WALUTY', 'Nie' );
$this->addIfNotEmpty ( $fpe, 'NOTOWANIE_WALUTY_ILE', '1' );
$this->addIfNotEmpty ( $fpe, 'NOTOWANIE_WALUTY_ZA_ILE', '1' );
$this->addIfNotEmpty ( $fpe, 'KURS_DO_KSIEGOWANIA', "Nie" );
}
$this->addIfNotEmpty ( $fpe, 'PLATNOSC_VAT_W_PLN', "Tak" );
$this->addIfNotEmpty ( $fpe, 'JPK_FA', "Tak" );
$this->addIfNotEmpty ( $fpe, 'DEKLARACJA_VAT27', "Nie" );
$this->addIfNotEmpty ( $fpe, 'WARTOSC_ZAKUPU', $value->purchase_price );
$this->addInvoicePositions ( $fpe, $value );
$this->xml_adopt ( $fpn, $fpe );
return $fpn;
}
public function addInvoicePositions($node, $object) {
$pozycje = $node->addChild ( 'POZYCJE' );
$positions = $object->getPositionList ( true );
global $app_list_strings;
foreach ( $positions as $position ) {
$header = new SimpleXMLElement ( '' );
$fpe = $header->addChild ( 'POZYCJA' );
$fpe->addChild ( 'STAWKA_VAT', $position ['ecmvat_name'] );
$fpe->addChild ( 'STATUS_VAT', 'opodatkowana' );
$fpe->addChild ( 'NETTO', $position ['total_netto'] );
$fpe->addChild ( 'VAT', $position ['total_vat'] );
if ($value->currency_id == null) {
$fpe->addChild ( 'NETTO_SYS', round ( $position ['total_netto'] * $object->currency_value_nbp, 2 ) );
$fpe->addChild ( 'VAT_SYS', round ( $position ['total_vat'] * $object->currency_value_nbp, 2 ) );
$fpe->addChild ( 'NETTO_SYS2', round ( $position ['total_netto'] * $object->currency_value_nbp, 2 ) );
$fpe->addChild ( 'VAT_SYS2', round ( $position ['total_vat'] * $object->currency_value_nbp, 2 ) );
}
$fpe->addChild ( 'RODZAJ_SPRZEDAZY',$app_list_strings['ecmproducts_group_ks_dom'][$position['product_ks_group']] );
$fpe->addChild ( 'UWZ_W_PROPORCJI','TAK' );
$this->xml_adopt ( $pozycje, $fpe );
}
}
public function getCurrencyDate($nbp, $cur_id) {
$res = $this->db->query ( "select date from currency_nbp_archive where currency_id='" . $cur_id . "' and nbp_table_name='" . $nbp . "'" );
$dane = $this->db->fetchByAssoc ( $res );
return $dane ['date'];
}
public function addIfNotEmpty(&$object, $key, $value) {
if ($value) {
if ($value != "") {
$object->addChild ( $key, $value );
}
}
}
public function findHomeAndLocale($numbers) {
$numbers = str_replace ( " ", "", $numbers );
$pos = strpos ( $numbers, '/' );
if ($pos !== false) {
return implode ( '/', $numbers );
}
return [ ];
}
public function xml_adopt($root, $new) {
$node = $root->addChild ( $new->getName (), ( string ) $new );
foreach ( $new->attributes () as $attr => $value ) {
$node->addAttribute ( $attr, $value );
}
foreach ( $new->children () as $ch ) {
self::xml_adopt ( $node, $ch );
}
}
public function getInvoicesObject() {
$invoices = new EcmInvoiceOut ();
$invoices = $invoices->get_full_list ( null, "register_date>='" . $this->date_from . "' and register_date<='" . $this->date_to . "'" );
return $invoices;
}
}
$exportOptima = new ExportOptima ( '04.08.2017', new OptimaXML () );
$exportOptima->loadXmlObject ();
$exportOptima->addInvoiceDocuments ();
?>