Files
crm.e5.pl/modules/EcmReports/RewizorGT/InvoiceCreator.php
2024-04-27 09:23:34 +02:00

195 lines
7.1 KiB
PHP

<?php
class InvoiceCreator{
private $db;
public $kontrahenci;
public function __construct($date){
$this->db=$GLOBALS['db'];
$date = new DateTime($date);
$this->date_from = $date->format("Y-m-01");
$this->date_to=$date->format("Y-m-t");
$this->kontrahenci=[];
}
public function getInvoices(){
$query="select * from ecminvoiceouts where deleted=0 and canceled=0 and register_date >='".$this->date_from."' and register_date <='".$this->date_to."' order by document_no ASC";
$rs = $this->db->query($query);
global $app_list_strings;
$documents=array();
while($dane = $this->db->fetchByAssoc($rs)){
$dokument = new Dokument();
$kontrahent = new Kontrahent();
if($dane['type']=='correct'){
$dokument->typ_dokumentu=(string)'KFS';
} else {
$dokument->typ_dokumentu=(string)'FS';
}
$dokument->status_dokumentu=($dane['canceled']==true? 2 :1);
$dokument->status_rejestracji_fiskalnej=0;
$dokument->numer_dokumentu=0;
$dokument->numer_dokumentu_dostawcy=$dane['document_no'];
$dokument->rozszerzenie_numeru=(string)"FS";
$dokument->pelny_numer_dokumentu=$dane['document_no'];
if($dane['type']=='correct'){
$ii = new EcmInvoiceOut();
$ii->retrieve($dane['ecminvoiceout_id']);
$dokument->numer_dokumentu_korygowanego=$ii->document_no;
$dokument->data_wystawienia_korekty=date("Ymd000000",strtotime($dane['register_date']));
$dokument->wartosc_wydanych_opakowan=0;
$dokument->wartosc_zwroconych_opakowan=0;
if($dokument->numer_dokumentu_korygowanego==""){
$dokument->numer_dokumentu_korygowanego='Korekta zbiorcza';
}
} else {
$dokument->numer_dokumentu_korygowanego=null;
$dokument->data_wystawienia_korekty=null;
}
$letters = substr($dane['parent_nip'],0,2);
if(ctype_alpha ($letters)){
$rest = substr($dane['parent_nip'],2);
$dane['parent_nip']=$letters.' '.$rest;
}
$dokument->numer_zamowienia=$dane['order_no'];
$dokument->magazyn_docelowy=null;
$a = new Account();
$a->retrieve($dane['parent_id']);
$a->name=str_replace("\r\n","",$a->name);
$kontrahent->typ_kontrahenta=(float)0;
$kontrahent->kod_identyfikacyjny=$a->number;
$kontrahent->nazwa_skrocona=mb_substr($dane['parent_name'],0,40,'UTF-8');
$kontrahent->nazwa_pelna=str_replace("\r\n","",$dane['parent_name']);
$kontrahent->miasto=$dane['parent_address_city'];
$kontrahent->kod_pocztowy=$a->billing_address_postalcode;
$kontrahent->ulica_i_adres=$dane['parent_address_street'];
$kontrahent->nip=$dane['parent_nip'];
if($a->invoice_type=='U'){
$kontrahent->prefix=mb_substr($a->to_vatid,0,2,'UTF-8');
$kontrahent->czy_unijny=1;
} else {
$kontrahent->czy_unijny=0;
}
$this->kontrahenci[$a->id]=$kontrahent;
$dokument->kod_identyfikacyjny_kontrahenta=$a->number;
$dokument->nazwa_skrocona=mb_substr($dane['parent_name'],0,40,'UTF-8');
$dokument->nazwa_pelna=str_replace("\r\n","",$dane['parent_name']);
$dokument->miasto=$dane['parent_address_city'];
$dokument->kod_pocztowy=$a->billing_address_postalcode;
$dokument->ulica_i_numer=$dane['parent_address_street'];
$dokument->nip=$dane['parent_nip'];
$dokument->kategoria="Sprzedaż";
$dokument->podtytul=null;
$dokument->data_wystawienia=date("Ymd000000",strtotime($dane['register_date']));
$dokument->data_sprzedazy=date("Ymd000000",strtotime($dane['sell_date']));
$dokument->data_otrzymania=date("Ymd000000",strtotime($dane['register_date']));
$dokument->czy_dokumenty_wystawian_wg_ceny_netto=0;
$dokument->wartosc_netto=(float)$dane['total_netto'];
$dokument->wartosc_vat=(float)$dane['total_vat'];
$dokument->wartosc_brutto=(float)$dane['total_brutto'];
$dokument->koszt=(float)$dane['purchase_price'];
$dokument->rabat_format_platnosci=$app_list_strings['payment_method'][$dane['payment_method']];
$dokument->rabat_termin_platnosci=date("Ymd000000",strtotime($dane['payment_date']));
$dokument->kwota_zaplacona_przy_odbiorze=(float)$dane['paid_val'];
$dokument->wartosc_do_zaplaty=(float)round($dane['total_brutto'],2);
$dokument->zaokraglenie_wartosci_do_zaplaty=0;
$dokument->zaokraglenie_wartosci_vat=0;
$dokument->automatyczne_zaokgraglanie=0;
$dokument->statusy_rozszerzone_i_specjalne=0;
$u = new User();
$u->retrieve($dane['assigned_user_id']);
$dokument->nazwisko_i_imie_wystawcy=$u->full_name;
if($dane['currency_id']=="PLN"){
$dokument->waluta='PLN';
} else {
$cur = new Currency();
$cur->retrieve($dane['currency_id']);
$dokument->waluta=$cur->name;
$dokument->kurs_waluty=(float)$dane['currency_value_nbp'];
}
$dokument->uwagi=str_replace("\r\n","",$dane['pdf_text']);
$dokument->import_dokumentu=0;
if($dane['pdf_type']=='K'){
$dokument->rodzaj_transakcji=0;
} else {
if($dane['pdf_type']=='U'){
$dokument->rodzaj_transakcji=2;
} else {
$dokument->rodzaj_transakcji=1;
}
}
//$dokument->panstwo_kontrahenta=$a->billing_address_country;
if($a->invoice_type=='U'){
$dokument->prefix_panstwa_ue=mb_substr($a->to_vatid,0,2,'UTF-8');
$dokument->czy_kontrahent_unijny=1;
}
$dokument->setPozycjeObiekt($this->getDocumentPositions($dane['id'],$dokument));
$documents[]=$dokument;
}
return $documents;
}
public function getDocumentPositions($id,&$doc){
$query="select * from ecminvoiceoutitems where ecminvoiceout_id='".$id."' and deleted=0";
$rr=$this->db->query($query);
$pozycje=[];
while($dane=$this->db->fetchByAssoc($rr)){
if($pozycje[$dane ['ecmvat_value']]!=""){
$obiekt = $pozycje[$dane ['ecmvat_value']];
if ($doc->typ_dokumentu!= 'FS') {
$obiekt->wartosc_netto+= $dane ['total_netto_corrected'];
$obiekt->wartosc_vat+= $dane ['total_vat_corrected'];
$obiekt->wartosc_brutto+= $dane ['total_brutto_corrected'];
} else {
$obiekt->wartosc_netto+= $dane ['total_netto'];
$obiekt->wartosc_vat+= $dane ['total_vat'];
$obiekt->wartosc_brutto+= $dane ['total_brutto'];
}
$obiekt->wartosc_nabycia+= round ( $dane ['price_purchase'] * $dane ['quantity'], 2 );
$pozycje[$dane ['ecmvat_value']]=$obiekt;
} else {
$pozycja = new Pozycja;
$pozycja->symbol_stawki_vat = $dane ['ecmvat_value'];
$pozycja->wysokosc_stawki_vat_w_procentach = floatval ($dane ['ecmvat_value'] . '.00');
if ($doc->typ_dokumentu!= 'FS') {
$pozycja->wartosc_netto =floatval($dane ['total_netto_corrected']);
$pozycja->wartosc_vat = floatval($dane ['total_vat_corrected']);
$pozycja->wartosc_brutto =floatval($dane ['total_brutto_corrected']);
} else {
$pozycja->wartosc_netto = floatval($dane ['total_netto']);
$pozycja->wartosc_vat = floatval($dane ['total_vat']);
$pozycja->wartosc_brutto = floatval($dane ['total_brutto']);
}
$pozycja->wartosc_nabycia = round ( $dane ['price_purchase'] * $dane ['quantity'], 2 );
$pozycje[$dane ['ecmvat_value']]=$pozycja;
}
}
$doc->pozycje=count($pozycja);
return $pozycje;
}
}
?>