app = $app; if ($intern) return; $this->app->ActionHandlerInit($this); $this->app->ActionHandler("list", "lieferantengutschrift_list"); $this->app->ActionHandler("create", "lieferantengutschrift_edit"); // This automatically adds a "New" button $this->app->ActionHandler("edit", "lieferantengutschrift_edit"); $this->app->ActionHandler("positionen", "lieferantengutschrift_positionen"); $this->app->ActionHandler("delete", "lieferantengutschrift_delete"); $this->app->ActionHandler("deletepos", "lieferantengutschrift_deletepos"); $this->app->ActionHandler("editpos", "lieferantengutschrift_editpos"); $this->app->ActionHandler("dateien", "lieferantengutschrift_dateien"); $this->app->ActionHandler("inlinepdf", "lieferantengutschrift_inlinepdf"); $this->app->ActionHandler("positioneneditpopup", "lieferantengutschrift_positioneneditpopup"); $this->app->ActionHandler("freigabe", "lieferantengutschrift_freigabe"); $this->app->ActionHandler("freigabeeinkauf", "lieferantengutschrift_freigabeeinkauf"); $this->app->ActionHandler("freigabebuchhaltung", "lieferantengutschrift_freigabebuchhaltung"); $this->app->ActionHandler("freigabebezahlt", "lieferantengutschrift_freigabebezahlt"); $this->app->ActionHandler("ruecksetzeneinkauf", "lieferantengutschrift_ruecksetzeneinkauf"); $this->app->ActionHandler("ruecksetzenbuchhaltung", "lieferantengutschrift_ruecksetzenbuchhaltung"); $this->app->ActionHandler("ruecksetzenbezahlt", "lieferantengutschrift_ruecksetzenbezahlt"); $this->app->ActionHandler("minidetail", "lieferantengutschrift_minidetail"); $this->app->DefaultActionHandler("list"); $this->app->ActionHandlerListen($app); } public function Install() { /* Fill out manually later */ } function TableSearch(&$app, $name, $erlaubtevars) { switch ($name) { case "lieferantengutschrift_list": $allowed['lieferantengutschrift_list'] = array('list'); $heading = array('','','Belegnr','Adresse', 'Lieferant', 'RE-Nr', 'RE-Datum', 'Betrag (brutto)', 'Währung','Zahlstatus', 'Ziel','Skontoziel','Skonto','Status','Monitor', 'Menü'); $width = array('1%','1%','10%'); // Fill out manually later // columns that are aligned right (numbers etc) // $alignright = array(4,5,6,7,8); $findcols = array( 'v.id', 'v.id', 'v.belegnr', 'a.name', 'a.lieferantennummer', 'v.rechnung', 'v.rechnungsdatum', 'v.betrag', 'v.waehrung', 'v.bezahlt', 'v.zahlbarbis', 'v.skontobis', 'v.skonto', 'v.status', 'v.status_beleg', 'v.id' ); $searchsql = array( 'a.name', 'a.lieferantennummer', 'v.rechnung', 'v.internebemerkung' ); $defaultorder = 1; $defaultorderdesc = 0; $alignright = array(8); $sumcol = array(8); $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; // $moreinfo = true; // Allow drop down details // $moreinfoaction = "lieferschein"; // specify suffix for minidetail-URL to allow different minidetails // $menucol = 11; // Set id col for moredata/menu $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; $sql = "SELECT SQL_CALC_FOUND_ROWS v.id, $dropnbox, v.belegnr, a.name, a.lieferantennummer, v.rechnung, ".$app->erp->FormatDate("v.rechnungsdatum").", ".$app->erp->FormatMenge('v.betrag',2).", v.waehrung, if(v.bezahlt,'bezahlt','offen'), ".$app->erp->FormatDate("v.zahlbarbis").", IF(v.skonto <> 0,".$app->erp->FormatDate("v.skontobis").",''), IF(v.skonto <> 0,CONCAT(".$app->erp->FormatMenge('v.skonto',0).",'%'),''), v.status, ".$app->YUI->IconsSQLverbindlichkeit().", v.id FROM lieferantengutschrift v LEFT JOIN adresse a ON v.adresse = a.id LEFT JOIN ( SELECT ds.parameter, COUNT(ds.objekt) datei_anzahl FROM datei_stichwoerter ds INNER JOIN datei d ON d.id = ds.datei WHERE ds.objekt='lieferantengutschrift' AND d.geloescht <> 1 GROUP BY ds.parameter ) d ON d.parameter = v.id "; $where = "1"; $count = "SELECT count(DISTINCT id) FROM lieferantengutschrift WHERE $where"; // $groupby = ""; // Toggle filters $this->app->Tpl->Add('JQUERYREADY', "$('#anhang').click( function() { fnFilterColumn1( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#wareneingang').click( function() { fnFilterColumn2( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#rechnungsfreigabe').click( function() { fnFilterColumn3( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#nichtbezahlt').click( function() { fnFilterColumn4( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#stornierte').click( function() { fnFilterColumn5( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#abgeschlossen').click( function() { fnFilterColumn6( 0 ); } );"); for ($r = 1;$r <= 8;$r++) { $this->app->Tpl->Add('JAVASCRIPT', ' function fnFilterColumn' . $r . ' ( i ) { if(oMoreData' . $r . $name . '==1) oMoreData' . $r . $name . ' = 0; else oMoreData' . $r . $name . ' = 1; $(\'#' . $name . '\').dataTable().fnFilter( \'\', i, 0,0 ); } '); } $more_data1 = $this->app->Secure->GetGET("more_data1"); if ($more_data1 == 1) { $where .= " AND datei_anzahl IS NULL"; } else { } $more_data2 = $this->app->Secure->GetGET("more_data2"); if ($more_data2 == 1) { $where .= " AND v.freigabe <> '1'"; } else { } $more_data3 = $this->app->Secure->GetGET("more_data3"); if ($more_data3 == 1) { $where .= " AND v.rechnungsfreigabe <> '1'"; } else { } $more_data4 = $this->app->Secure->GetGET("more_data4"); if ($more_data4 == 1) { $where .= " AND v.bezahlt <> 1"; } else { } $more_data5 = $this->app->Secure->GetGET("more_data5"); if ($more_data5 == 1) { } else { $where .= " AND v.status <> 'storniert'"; } $more_data6 = $this->app->Secure->GetGET("more_data6"); if ($more_data6 == 1) { } else { $where .= " AND v.status <> 'abgeschlossen'"; } $this->app->YUI->DatePicker('zahlbarbis'); $filterzahlbarbis = $this->app->YUI->TableSearchFilter($name, 7,'zahlbarbis'); if (!empty($filterzahlbarbis)) { $filterzahlbarbis = $this->app->String->Convert($filterzahlbarbis,'%1.%2.%3','%3-%2-%1'); $where .= " AND v.zahlbarbis <= '".$filterzahlbarbis."'"; } $this->app->YUI->DatePicker('skontobis'); $filterskontobis = $this->app->YUI->TableSearchFilter($name, 8,'skontobis'); if (!empty($filterskontobis)) { $filterskontobis = $this->app->String->Convert($filterskontobis,'%1.%2.%3','%3-%2-%1'); $where .= " AND v.skontobis <= '".$filterskontobis."'"; } // END Toggle filters $moreinfo = true; // Allow drop down details $menucol = 1; // For moredata break; case 'lieferantengutschrift_positionen': $allowed['lieferantengutschrift_positionen'] = array('list'); $id = $app->Secure->GetGET('id'); $freigabe = $app->DB->Select("SELECT freigabe FROM lieferantengutschrift WHERE id = '".$id."'"); $rechnungsfreigabe = $app->DB->Select("SELECT rechnungsfreigabe FROM lieferantengutschrift WHERE id = '".$id."'"); $heading = array('' ,'Verbindlichkeit', 'Artikel-Nr.','Artikel','Menge','Preis','Steuersatz','Sachkonto'); $width = array( '1%','1%', '20%', '20%', '1%', '1%', '3%', '1%', '1%'); $findcols = array('lgp.id','v.belegnr','art.nummer','art.name_de','lgp.menge','lgp.preis','lgp.steuersatz',"CONCAT(skv.sachkonto,' ',skv.beschriftung)",'lgp.id'); $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); $alignright = array(8,9,10); $defaultorder = 1; $defaultorderdesc = 0; if (empty($freigabe)) { $menu="
"."Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> "."Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"."
"; } else if (empty($rechnungsfreigabe)) { $menu="
"."Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"."
"; } else { $deletepos = array(''); } $heading[] = ''; $box = "CONCAT('') AS `auswahl`"; $verbindlichkeitlink = array ( '', ['sql' => 'v.belegnr'], '' ); $artikellink = array ( '', ['sql' => 'art.nummer'], '' ); $sql = " SELECT SQL_CALC_FOUND_ROWS lgp.id, $box, ".$this->app->erp->ConcatSQL($verbindlichkeitlink).", ".$this->app->erp->ConcatSQL($artikellink).", art.name_de, lgp.menge, lgp.preis, lgp.steuersatz, CONCAT(skv.sachkonto,' ',skv.beschriftung), lgp.id FROM lieferantengutschrift_position lgp INNER JOIN lieferantengutschrift lg ON lg.id = lgp.lieferantengutschrift LEFT JOIN verbindlichkeit_position vp ON vp.id = lgp.verbindlichkeit_position LEFT JOIN verbindlichkeit v ON vp.verbindlichkeit = v.id INNER JOIN artikel art ON art.id = lgp.artikel INNER JOIN adresse adr ON adr.id = lg.adresse LEFT JOIN kontorahmen skv ON skv.id = lgp.kontorahmen "; $where = "lgp.lieferantengutschrift = ".$id; $count = ""; break; case 'verbindlichkeit_positionen': $allowed['verbindlichkeit_positionen'] = array('list'); $id = $app->Secure->GetGET('id'); //$verbindlichkeit = $app->DB->Select("SELECT verbindlichkeit FROM lieferantengutschrift WHERE id = '".$id."'"); $heading = array('', 'Verbindlichkeit', 'Artikel-Nr.','Artikel','Menge','Preis','Steuersatz','Sachkonto', ''); $width = array( '1%','2%', '2%', '20%', '1%', '1%', '3%', '1%', '1%'); $findcols = array('vp.id','v.belegnr','art.nummer','art.name_de','vp.menge','vp.preis','vp.steuersatz',"CONCAT(skv.sachkonto,' ',skv.beschriftung)",'vp.id'); $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); $alignright = array(8,9,10); $defaultorder = 1; $defaultorderdesc = 0; $auswahl = array ( ' 'vp.id'], '"/>' ); $werte = array ( '' ); $preise = array ( '' ); $artikellink = array ( '', ['sql' => 'art.nummer'], '' ); $box = "CONCAT('') AS `auswahl`"; $sql = " SELECT SQL_CALC_FOUND_ROWS vp.id, ".$this->app->erp->ConcatSQL($auswahl).", v.belegnr, ".$this->app->erp->ConcatSQL($artikellink).", art.name_de, ".$this->app->erp->ConcatSQL($werte).", vp.preis, vp.steuersatz, CONCAT(skv.sachkonto,' ',skv.beschriftung), vp.id FROM verbindlichkeit_position vp INNER JOIN verbindlichkeit v ON v.id = vp.verbindlichkeit INNER JOIN paketdistribution pd ON pd.id = vp.paketdistribution INNER JOIN artikel art ON art.id = pd.artikel INNER JOIN adresse adr ON adr.id = v.adresse LEFT JOIN kontorahmen skv ON skv.id = vp.kontorahmen LEFT JOIN ( SELECT verbindlichkeit_position, SUM(menge) AS menge FROM lieferantengutschrift_position lgp INNER JOIN lieferantengutschrift lg ON lg.id = lgp.lieferantengutschrift WHERE lg.status <> 'storniert' AND verbindlichkeit_position <> 0 and verbindlichkeit_position IS NOT NULL ) lgp ON lgp.verbindlichkeit_position = vp.id "; $where = "v.adresse = (SELECT adresse FROM lieferantengutschrift WHERE id = ".$id.") AND v.status IN ('freigegeben','abgeschlossen')"; $count = ""; break; case 'artikel_manuell': $allowed['paketdistribution_list'] = array('list'); $heading = array('Art.-Nummer', 'Beschreibung', 'Menge', 'Preis','Steuer','Sachkonto',''); $width = array( '5%', '30%', '5%', '5%', '1%', '1%', '1%'); $findcols = array('nummer','name_de','','','umsatzsteuer',"CONCAT(skart.sachkonto,' ',skart.beschriftung)",'id'); $searchsql = array(''); $alignright = array('5'); $defaultorder = 1; $defaultorderdesc = 0; $auswahl = array ( ' 'a.id'], '" hidden/>', ['sql' => 'a.nummer'] ); $input_for_menge = array( '', '' ); $input_for_bemerkung = array( '', '' ); $preise = array ( '' ); $sql = " SELECT SQL_CALC_FOUND_ROWS a.id, ".$this->app->erp->ConcatSQL($auswahl).", name_de, ".$this->app->erp->ConcatSQL($input_for_menge).", ".$this->app->erp->ConcatSQL($preise)." '', a.umsatzsteuer, CONCAT(skart.sachkonto,' ',skart.beschriftung) FROM artikel a LEFT JOIN kontorahmen skart ON skart.id = a.kontorahmen"; $where = " (geloescht <> 1)"; $multifilter = $this->app->YUI->TableSearchFilter($name, 8,'multifilter'); if (!empty($multifilter)) { $multifilter_array = explode(' ',$multifilter); $where .= " AND (1=0"; foreach($multifilter_array as $keyword) { $where .= " OR name_de LIKE '%".$keyword."%'"; $where .= " OR nummer LIKE '%".$keyword."%'"; } $where .= ")"; } $count = ""; break; } $erg = false; foreach ($erlaubtevars as $k => $v) { if (isset($$v)) { $erg[$v] = $$v; } } return $erg; } function lieferantengutschrift_list() { // Process multi action $submit = $this->app->Secure->GetPOST('submit'); switch($submit) { case 'status_berechnen': $sql = "SELECT id FROM lieferantengutschrift WHERE status <> 'abgeschlossen' AND status <> 'storniert'"; $ids = $this->app->DB->SelectArr($sql); foreach ($ids as $lieferantengutschrift) { $this->lieferantengutschrift_abschliessen($lieferantengutschrift['id']); } break; case 'ausfuehren': $auswahl = $this->app->Secure->GetPOST('auswahl'); $aktion = $this->app->Secure->GetPOST('sel_aktion'); $selectedIds = []; if(!empty($auswahl)) { foreach($auswahl as $selectedId) { $selectedId = (int)$selectedId; if($selectedId > 0) { $selectedIds[] = $selectedId; } } switch ($aktion) { case 'freigabeeinkauf': foreach ($selectedIds as $id) { $result = $this->lieferantengutschrift_freigabeeinkauf($id); if ($result !== true) { $this->app->YUI->Message('warning',$result); } } break; case 'freigabebuchhaltung': foreach ($selectedIds as $id) { $result = $this->lieferantengutschrift_freigabebuchhaltung($id); if ($result !== true) { $this->app->YUI->Message('warning',$result); } } break; case 'bezahlt': foreach ($selectedIds as $id) { $result = $this->lieferantengutschrift_freigabebezahlt($id); if ($result !== true) { $this->app->YUI->Message('warning',$result); } } break; case 'drucken': $drucker = $this->app->Secure->GetPOST('seldrucker'); foreach ($selectedIds as $id) { $file_attachments = $this->app->erp->GetDateiSubjektObjekt('%','lieferantengutschrift',$id); if (!empty($file_attachments)) { foreach ($file_attachments as $file_attachment) { if ($this->app->erp->GetDateiEndung($file_attachment) == 'pdf') { $file_contents = $this->app->erp->GetDatei($file_attachment); $lieferantengutschrift = $this->app->DB->SelectRow("SELECT DATE_FORMAT(rechnungsdatum, '%Y%m%d') rechnungsdatum, belegnr FROM lieferantengutschrift WHERE id = ".$id." LIMIT 1"); $file_name = $lieferantengutschrift['rechnungsdatum']."_LG".$lieferantengutschrift['belegnr'].".pdf"; $file_path = rtrim($this->app->erp->GetTMP(),'/')."/".$file_name; $handle = fopen ($file_path, "wb"); if ($handle) { fwrite($handle, $file_contents); fclose($handle); $this->app->printer->Drucken($drucker,$file_path); } else { $this->app->YUI->Message('error',"Drucken fehlgeschlagen!"); } } } } } break; } } break; } $this->app->erp->MenuEintrag("index.php?module=lieferantengutschrift&action=list", "Übersicht"); $this->app->erp->MenuEintrag("index.php?module=lieferantengutschrift&action=create", "Neu anlegen"); $this->app->erp->MenuEintrag("index.php", "Zurück"); $this->app->YUI->TableSearch('TAB1', 'lieferantengutschrift_list', "show", "", "", basename(__FILE__), __CLASS__); if($this->app->erp->RechteVorhanden('lieferantengutschrift', 'freigabeeinkauf')){ $this->app->Tpl->Set('MANUELLFREIGABEEINKAUF', ''); } if($this->app->erp->RechteVorhanden('lieferantengutschrift', 'freigabebuchhaltung')){ $this->app->Tpl->Set('MANUELLFREIGABEBUCHHALTUNG', ''); } if($this->app->erp->RechteVorhanden('lieferantengutschrift', 'freigabebezahlt')){ $this->app->Tpl->Set('ALSBEZAHLTMARKIEREN', ''); } $this->app->User->SetParameter('table_lieferantengutschrift_list_zahlbarbis', ''); $this->app->User->SetParameter('table_lieferantengutschrift_list_skontobis', ''); $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker()); $this->app->Tpl->Parse('PAGE', "lieferantengutschrift_list.tpl"); } public function lieferantengutschrift_delete() { $id = (int) $this->app->Secure->GetGET('id'); $this->app->DB->Delete("UPDATE `lieferantengutschrift` SET status='storniert' WHERE `id` = '{$id}'"); $this->app->Tpl->Set('MESSAGE', "
Der Eintrag wurde storniert.
"); $this->lieferantengutschrift_list(); } public function lieferantengutschrift_deletepos() { $posid = (int) $this->app->Secure->GetGET('posid'); $id = (int) $this->app->Secure->GetGET('id'); $lieferantengutschrift = $this->app->DB->Select("SELECT lieferantengutschrift FROM lieferantengutschrift_position WHERE id ='{$posid}'"); $this->app->DB->Delete("DELETE vp FROM lieferantengutschrift_position vp INNER JOIN lieferantengutschrift v ON v.id = vp.lieferantengutschrift WHERE vp.id = '{$posid}' AND v.freigabe <> 1"); header("Location: index.php?module=lieferantengutschrift&action=edit&id=$id#tabs-2"); } /* * Edit lieferantengutschrift item * If id is empty, create a new one */ function lieferantengutschrift_edit($einkauf_automatik_aus = false) { $id = $this->app->Secure->GetGET('id'); // Check if other users are editing this id if($this->app->erp->DisableModul('lieferantengutschrift',$id)) { return; } $this->app->Tpl->Set('ID', $id); $this->lieferantengutschrift_menu($id); $input = $this->GetInput(); $submit = $this->app->Secure->GetPOST('submit'); if (empty($id)) { // New item $id = 'NULL'; $input['status'] = 'angelegt'; } if (!empty($submit)) { $einkauf_automatik_aus = false; } switch($submit) { case 'speichern': // Write to database // Add checks here $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe, adresse, belegnr FROM lieferantengutschrift WHERE id =".$id)[0]; if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) { $internebemerkung = $input['internebemerkung']; $projekt = $input['projekt']; $kostenstelle = $input['kostenstelle']; unset($input); $input['internebemerkung'] = $internebemerkung; $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$projekt,true); $input['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$kostenstelle."'"); } else { if ($freigabe['belegnr']) { unset($input['adresse']); } else { $input['adresse'] = $this->app->erp->ReplaceLieferantennummer(true,$input['adresse'],true); // Parameters: Target db?, value, from form? } $input['rechnungsdatum'] = $this->app->erp->ReplaceDatum(true,$input['rechnungsdatum'],true); // Parameters: Target db?, value, from form? $input['eingangsdatum'] = $this->app->erp->ReplaceDatum(true,$input['eingangsdatum'],true); // Parameters: Target db?, value, from form? $input['skontobis'] = $this->app->erp->ReplaceDatum(true,$input['skontobis'],true); // Parameters: Target db?, value, from form? $input['zahlbarbis'] = $this->app->erp->ReplaceDatum(true,$input['zahlbarbis'],true); // Parameters: Target db?, value, from form? $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); $input['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$input['kostenstelle']."'"); if(empty($input['projekt']) && !empty($input['adresse'])) { $input['projekt'] = $this->app->erp->GetCreateProjekt($input['adresse']); } if (!empty($input['adresse'])) { $adressdaten = $this->app->DB->SelectRow(" SELECT zahlungszieltagelieferant, zahlungszieltageskontolieferant, zahlungszielskontolieferant, ust_befreit FROM adresse WHERE id = ".$input['adresse'] ); if ($input['zahlbarbis'] == '0000-00-00' && $input['rechnungsdatum'] != '0000-00-00' && !empty($adressdaten['zahlungszieltagelieferant'])) { $input['zahlbarbis'] = date('Y-m-d',strtotime($input['rechnungsdatum']." + ".$adressdaten['zahlungszieltagelieferant']." days")); } if ($input['skontobis'] == '0000-00-00' && $input['rechnungsdatum'] != '0000-00-00' && !empty($adressdaten['zahlungszieltageskontolieferant'])) { $input['skontobis'] = date('Y-m-d',strtotime($input['rechnungsdatum']." + ".$adressdaten['zahlungszieltageskontolieferant']." days")); $input['skonto'] = $adressdaten['zahlungszielskontolieferant']; } } } $columns = "id, "; $values = "$id, "; $update = ""; $fix = ""; foreach ($input as $key => $value) { $columns = $columns.$fix.$key; $values = $values.$fix."'".$value."'"; $update = $update.$fix.$key." = '$value'"; $fix = ", "; } // echo($columns."
"); // echo($values."
"); // echo($update."
"); $sql = "INSERT INTO lieferantengutschrift (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update; // echo($sql); $this->app->DB->Update($sql); if ($id == 'NULL') { $id = $this->app->DB->GetInsertID(); $msg = $this->app->erp->base64_url_encode("
Das Element wurde erfolgreich angelegt.
"); header("Location: index.php?module=lieferantengutschrift&action=edit&id=$id&msg=$msg"); } else { $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
"); } break; case 'positionen_hinzufuegen': $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM lieferantengutschrift WHERE id =".$id)[0]; if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) { break; } // Process multi action $ids = $this->app->Secure->GetPOST('ids'); $werte = $this->app->Secure->GetPOST('werte'); $preise = $this->app->Secure->GetPOST('preise'); foreach ($ids as $key => $verbindlichkeit_position) { $menge = $werte[$key]; if ($menge <= 0) { continue; } // Check available number $sql = " SELECT IF( vp.menge > COALESCE(lgp.menge,0), vp.menge - COALESCE(lgp.menge,0), 0 ) offen_menge FROM verbindlichkeit_position vp LEFT JOIN( SELECT verbindlichkeit_position, SUM(menge) AS menge FROM lieferantengutschrift_position lgp GROUP BY verbindlichkeit_position ) lgp ON vp.id = lgp.verbindlichkeit_position WHERE vp.id = ".$verbindlichkeit_position." "; $offen_menge = $this->app->DB->Select($sql); if ($offen_menge === 0) { continue; } if ($menge > $offen_menge && !empty($offen_menge)) { $menge = $offen_menge; } if ($menge == 0) { continue; } $sql = "SELECT a.id, a.umsatzsteuer, a.steuersatz, COALESCE(if (skart.id <> 0,skart.id,skadr.id),0) AS kontorahmen, vp.preis FROM verbindlichkeit_position vp INNER JOIN verbindlichkeit v ON v.id = vp.verbindlichkeit INNER JOIN artikel a ON a.id = vp.artikel INNER JOIN adresse adr ON v.adresse = adr.id LEFT JOIN kontorahmen skart ON skart.id = a.kontorahmen LEFT JOIN kontorahmen skadr ON skadr.id = adr.kontorahmen WHERE vp.id =".$verbindlichkeit_position; $artikel = $this->app->DB->SelectRow($sql); $einartikel = $artikel['id']; $umsatzsteuer = $artikel['umsatzsteuer']; $kontorahmen = $artikel['kontorahmen']; $preis = $artikel['preis']; if(empty($umsatzsteuer) && is_numeric($artikel['steuersatz'])) { $steuersatz = $artikel['steuersatz']; } else { $steuersatz = $this->get_steuersatz($umsatzsteuer,$id); } $sql = "INSERT INTO lieferantengutschrift_position (lieferantengutschrift,verbindlichkeit_position, menge, preis, steuersatz, artikel, kontorahmen) VALUES ($id, $verbindlichkeit_position, $menge, $preis, $steuersatz, $einartikel, $kontorahmen)"; $this->app->DB->Insert($sql); } break; case 'artikel_manuell_hinzufuegen': $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM lieferantengutschrift WHERE id =".$id)[0]; if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) { break; } // Process multi action $ids = $this->app->Secure->GetPOST('manuell_artikel_ids'); $werte = $this->app->Secure->GetPOST('manuell_mengen'); $preise = $this->app->Secure->GetPOST('preise'); $bruttoeingabe = $this->app->Secure->GetPOST('bruttoeingabe'); foreach ($ids as $key => $artikelid) { $menge = $werte[$key]; if ($menge <= 0) { continue; } $preis = $preise[$key]; if ($preis <= 0) { $preis = 0; } $sql = "SELECT a.id, a.umsatzsteuer, a.steuersatz, COALESCE(skart.id,0) AS kontorahmen FROM artikel a LEFT JOIN kontorahmen skart ON skart.id = a.kontorahmen WHERE a.id =".$artikelid; $artikel = $this->app->DB->SelectRow($sql); $einartikel = $artikel['id']; $umsatzsteuer = $artikel['umsatzsteuer']; if (empty($artikel['kontorahmen'])) { $kontorahmen = $this->app->DB->Select("SELECT a.kontorahmen FROM adresse a INNER JOIN lieferantengutschrift lg ON lg.adresse = a.id WHERE lg.id = ".$id); } else { $kontorahmen = $artikel['kontorahmen']; } if(empty($umsatzsteuer) && is_numeric($artikel['steuersatz'])) { $steuersatz = $artikel['steuersatz']; } else { $steuersatz = $this->get_steuersatz($umsatzsteuer,$id); } if ($bruttoeingabe) { $preis = $preis / (1+($steuersatz/100)); } $sql = "INSERT INTO lieferantengutschrift_position (lieferantengutschrift,verbindlichkeit_position, menge, preis, steuersatz, artikel, kontorahmen) VALUES ($id, 0, $menge, $preis, $steuersatz, $einartikel, $kontorahmen)"; $this->app->DB->Insert($sql); } break; case 'positionen_entfernen': $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM lieferantengutschrift WHERE id =".$id)[0]; if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) { break; } // Process multi action $ids = $this->app->Secure->GetPOST('auswahl'); if (!is_array($ids)) { break; } $this->app->DB->Delete("DELETE vp FROM lieferantengutschrift_position vp INNER JOIN lieferantengutschrift v ON v.id = vp.lieferantengutschrift WHERE vp.id IN (".implode(',',$ids).") AND v.freigabe <> 1"); break; case 'positionen_steuersatz_zu_netto': $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM lieferantengutschrift WHERE id =".$id)[0]; if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) { break; } // Process multi action $ids = $this->app->Secure->GetPOST('auswahl'); if (!is_array($ids)) { break; } foreach ($ids as $posid) { $tmpsteuersatz = null; $tmpsteuertext = null; $erloes = null; $this->app->erp->GetSteuerPosition("lieferantengutschrift",$posid,$tmpsteuersatz,$tmpsteuertext,$erloes); $faktor = 1+($tmpsteuersatz/100); $sql = "UPDATE lieferantengutschrift_position SET preis = preis / ".$faktor." WHERE id = $posid"; $this->app->DB->Update($sql); } break; case 'positionen_kontorahmen_setzen': $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM lieferantengutschrift WHERE id =".$id)[0]; if ($freigabe['rechnungsfreigabe']) { break; } // Process multi action $ids = $this->app->Secure->GetPOST('auswahl'); if (!is_array($ids)) { break; } $positionen_sachkonto = $this->app->Secure->GetPOST('positionen_sachkonto'); $positionen_kontorahmen = $this->app->erp->ReplaceKontorahmen(true,$positionen_sachkonto,false); foreach ($ids as $posid) { $sql = "UPDATE lieferantengutschrift_position SET kontorahmen = '".$positionen_kontorahmen."' WHERE id =".$posid; $this->app->DB->Update($sql); } break; } // Load values again from database $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS v.id, $dropnbox, v.belegnr, v.status_beleg, v.schreibschutz, v.rechnung, v.zahlbarbis, ".$this->app->erp->FormatMengeBetrag('v.betrag')." AS betrag, v.skonto, v.skontobis, v.freigabe, v.freigabemitarbeiter, v.adresse, v.projekt, v.status, v.bezahlt, v.firma, v.logdatei, v.waehrung, v.zahlungsweise, v.eingangsdatum, v.rechnungsdatum, v.rechnungsfreigabe, v.kostenstelle, v.beschreibung, v.sachkonto, v.internebemerkung, a.lieferantennummer, a.name AS adresse_name FROM lieferantengutschrift v LEFT JOIN adresse a ON a.id = v.adresse"." WHERE v.id=$id"); foreach ($result[0] as $key => $value) { $this->app->Tpl->Set(strtoupper($key), $value); } if (!empty($result[0])) { $lieferantengutschrift_from_db = $result[0]; } // Check positions $pos_check = $this->check_positions($lieferantengutschrift_from_db['id'],$lieferantengutschrift_from_db['betrag']); $this->app->Tpl->Set('BETRAGNETTO', $pos_check['betrag_netto']); $this->app->Tpl->Set('BETRAGBRUTTOPOS', $pos_check['betrag_brutto']); if (empty($pos_check['rundungsdifferenz'])) { $this->app->Tpl->Set('RUNDUNGSDIFFERENZICONHIDDEN', 'hidden'); } else { $this->app->Tpl->Set('RUNDUNGSDIFFERENZ', $pos_check['rundungsdifferenz']); } if ($pos_check['pos_ok']) { if (!$lieferantengutschrift_from_db['freigabe'] && !$einkauf_automatik_aus) { if ($this->lieferantengutschrift_freigabeeinkauf($id,"lieferantengutschrift automatisch freigegeben (Einkauf)") === true) { $this->app->YUI->Message('success',"lieferantengutschrift automatisch freigegeben (Einkauf)"); $lieferantengutschrift_from_db['freigabe'] = 1; } else { $this->app->YUI->Message('warning','Waren-/Leistungsprüfung (Einkauf) nicht abgeschlossen'); } } $this->app->Tpl->Set('POSITIONENMESSAGE', '
Positionen vollständig
'); if ($lieferantengutschrift_from_db['status'] != 'abgeschlossen' && $lieferantengutschrift_from_db['status'] != 'storniert') { $this->lieferantengutschrift_abschliessen($id); } } else { $this->app->Tpl->Set(' POSITIONENMESSAGE', '
Positionen nicht vollständig. Bruttobetrag '. $lieferantengutschrift_from_db['betrag']. ', Summe Positionen (brutto) '. $pos_check['betrag_brutto']. ', Differenz '. round($pos_check['betrag_brutto']-$lieferantengutschrift_from_db['betrag'],2). '
' ); if ($lieferantengutschrift_from_db['freigabe']) { $this->app->DB->Update("UPDATE lieferantengutschrift SET freigabe = 0 WHERE id = ".$id); $lieferantengutschrift_from_db['freigabe'] = 0; $this->app->YUI->Message('warning',"lieferantengutschrift rückgesetzt (Einkauf)"); } } /* * Add displayed items later * $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email); $this->app->Tpl->Add('EMAIL', $email); $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername); $this->app->YUI->AutoComplete("artikel", "artikelnummer"); */ $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); // prevent manual setting if (!empty($lieferantengutschrift_from_db['belegnr'])) { $this->app->Tpl->Set('ADRESSESAVEDISABLED','disabled'); } else { $this->app->YUI->AutoComplete("adresse", "lieferant"); $this->app->YUI->AutoComplete("verbindlichkeit", "verbindlichkeit",false,"&adresse=".$lieferantengutschrift_from_db['adresse']); } if (empty($lieferantengutschrift_from_db['adresse']) || $lieferantengutschrift_from_db['status'] == 'angelegt') { $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); $this->app->Tpl->Set('FREIGABEBEZAHLTHIDDEN','hidden'); $this->app->Tpl->Set('POSITIONHINZUFUEGENHIDDEN','hidden'); $this->app->Tpl->Set('POSITIONENHIDDEN','hidden'); } if ($lieferantengutschrift_from_db['freigabe']) { $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); $this->app->Tpl->Set('EINKAUFINFOHIDDEN','hidden'); $this->app->Tpl->Set('SAVEDISABLED','disabled'); $this->app->Tpl->Set('POSITIONHINZUFUEGENHIDDEN','hidden'); } else { $this->app->Tpl->Set('RUECKSETZENEINKAUFHIDDEN','hidden'); $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); } if (!empty($positionen)) { $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); } if ($lieferantengutschrift_from_db['rechnungsfreigabe']) { $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); $this->app->Tpl->Set('RUECKSETZENEINKAUFHIDDEN','hidden'); $this->app->Tpl->Set('SACHKONTOCHANGEHIDDEN','hidden'); } else { $this->app->Tpl->Set('RUECKSETZENBUCHHALTUNGHIDDEN','hidden'); } if ($lieferantengutschrift_from_db['bezahlt'] == '1') { $this->app->Tpl->Set('FREIGABEBEZAHLTHIDDEN','hidden'); } else { $this->app->Tpl->Set('RUECKSETZENBEZAHLTHIDDEN','hidden'); } $this->app->Tpl->Set('WARENEINGANGCHECKED', $lieferantengutschrift_from_db['freigabe']==1?"checked":""); $this->app->Tpl->Set('RECHNUNGSFREIGABECHECKED', $lieferantengutschrift_from_db['rechnungsfreigabe']==1?"checked":""); $this->app->Tpl->Set('BEZAHLTCHECKED', $lieferantengutschrift_from_db['bezahlt']==1?"checked":""); $this->app->Tpl->Set('RECHNUNGSDATUM',$this->app->erp->ReplaceDatum(false,$lieferantengutschrift_from_db['rechnungsdatum'],false)); $this->app->YUI->DatePicker("rechnungsdatum"); $this->app->Tpl->Set('EINGANGSDATUM',$this->app->erp->ReplaceDatum(false,$lieferantengutschrift_from_db['eingangsdatum'],false)); $this->app->YUI->DatePicker("eingangsdatum"); $this->app->Tpl->Set('SKONTOBIS',$this->app->erp->ReplaceDatum(false,$lieferantengutschrift_from_db['skontobis'],false)); $this->app->YUI->DatePicker("skontobis"); $this->app->Tpl->Set('ZAHLBARBIS',$this->app->erp->ReplaceDatum(false,$lieferantengutschrift_from_db['zahlbarbis'],false)); $this->app->YUI->DatePicker("zahlbarbis"); $sql = "SELECT ".$this->app->YUI->IconsSQLverbindlichkeit() . " AS `icons` FROM lieferantengutschrift v LEFT JOIN ( SELECT ds.parameter, COUNT(ds.objekt) datei_anzahl FROM datei_stichwoerter ds INNER JOIN datei d ON d.id = ds.datei WHERE ds.objekt='lieferantengutschrift' AND d.geloescht <> 1 GROUP BY ds.parameter ) d ON d.parameter = v.id WHERE id=$id"; $icons = $this->app->DB->SelectArr($sql); $this->app->Tpl->Add('STATUSICONS', $icons[0]['icons']); $this->app->Tpl->Set('VERBINDLICHKEIT',$this->app->erp->ReplaceVerbindlichkeit(false,$lieferantengutschrift_from_db['verbindlichkeit'],false)); $this->app->YUI->AutoComplete("projekt", "projektname", 1); $this->app->Tpl->Set('PROJEKT',$this->app->erp->ReplaceProjekt(false,$lieferantengutschrift_from_db['projekt'],false)); $this->app->YUI->AutoComplete("kostenstelle", "kostenstelle", 1); $this->app->Tpl->Set('KOSTENSTELLE',$this->app->DB->SELECT("SELECT nummer FROM kostenstellen WHERE id = '".$lieferantengutschrift_from_db['kostenstelle']."'")); $waehrungenselect = $this->app->erp->GetSelect($this->app->erp->GetWaehrung(), $lieferantengutschrift_from_db['waehrung']); $this->app->Tpl->Set('WAEHRUNGSELECT', $waehrungenselect); $this->app->Tpl->Set('ADRESSE_ID', $lieferantengutschrift_from_db['adresse']); $this->app->Tpl->Set('ADRESSE', $this->app->erp->ReplaceLieferantennummer(false,$lieferantengutschrift_from_db['adresse'],false)); // Convert ID to form display $this->app->Tpl->Set('BESTELLUNG',$this->app->erp->ReplaceBestellung(false,$lieferantengutschrift_from_db['bestellung'],false)); $this->app->YUI->AutoComplete("bestellung", "lieferantenbestellung",0,"&adresse=".$lieferantengutschrift_from_db['adresse']); $this->app->YUI->CkEditor("internebemerkung"); $anzahldateien = $this->app->erp->AnzahlDateien("lieferantengutschrift",$id); if ($anzahldateien > 0) { $file = urlencode("../../../../index.php?module=lieferantengutschrift&action=inlinepdf&id=$id"); $iframe = ""; $this->app->Tpl->Set('INLINEPDF', $iframe); } else { $this->app->Tpl->Set('INLINEPDF', 'Keine Dateien vorhanden.'); } // -- POSITIONEN if (empty($lieferantengutschrift_from_db['freigabe'])) { $this->app->YUI->TableSearch('PAKETDISTRIBUTION', 'verbindlichkeit_positionen', "show", "", "", basename(__FILE__), __CLASS__); } $this->app->YUI->AutoComplete("positionen_sachkonto", "sachkonto", 1); $this->app->YUI->TableSearch('POSITIONEN', 'lieferantengutschrift_positionen', "show", "", "", basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('POSITIONENTAB', "lieferantengutschrift_positionen.tpl"); // -- POSITIONEN // -- POSITIONEN manuell if (empty($lieferantengutschrift_from_db['freigabe'])) { $this->app->YUI->TableSearch('ARTIKELMANUELL', 'artikel_manuell', "show", "", "", basename(__FILE__), __CLASS__); } $this->app->Tpl->Parse('POSITIONENMANUELLTAB', "lieferantengutschrift_artikel_manuell.tpl"); // -- POSITIONEN manuell $this->lieferantengutschrift_minidetail('MINIDETAIL',false); $this->app->Tpl->Parse('PAGE', "lieferantengutschrift_edit.tpl"); } function lieferantengutschrift_editpos() { $id = $this->app->Secure->GetGET('id'); $posid = $this->app->Secure->GetGET('posid'); $this->app->Tpl->Set('ID', $id); $this->app->erp->MenuEintrag("index.php?module=lieferantengutschrift&action=edit&id=$id#tabs-2", "Zurück"); $sachkonto = $this->app->Secure->GetPOST('sachkonto'); $menge = $this->app->Secure->GetPOST('menge'); $preis = $this->app->Secure->GetPOST('preis'); $steuersatz = $this->app->Secure->GetPOST('steuersatz'); $kontorahmen = $this->app->erp->ReplaceKontorahmen(true,$sachkonto,false); if ($menge < 0) { $menge = 0; } if ($preis < 0) { $preis = 0; } if ($steuersatz < 0) { $steuersatz = 0; } $submit = $this->app->Secure->GetPOST('submit'); $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM lieferantengutschrift WHERE id =".$id)[0]; if ($freigabe['rechnungsfreigabe'] && $freigabe['freigabe']) { $this->app->Tpl->Set('SAVEDISABLED','disabled'); $this->app->Tpl->Set('SACHKONTOSAVEDISABLED','disabled'); } else if ($freigabe['freigabe']) { $this->app->Tpl->Set('SAVEDISABLED','disabled'); if ($submit != '') { $sql = " UPDATE lieferantengutschrift_position SET kontorahmen = '$kontorahmen' WHERE id = ".$posid." "; $this->app->DB->Update($sql); $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
"); header("Location: index.php?module=lieferantengutschrift&action=edit&id=$id&msg=$msg#tabs-2"); } } else { if ($submit != '') { $sql = " UPDATE lieferantengutschrift_position SET menge = '$menge', preis = '$preis', steuersatz = '$steuersatz', kontorahmen = '$kontorahmen' WHERE id = ".$posid." "; $this->app->DB->Update($sql); $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
"); header("Location: index.php?module=lieferantengutschrift&action=edit&id=$id&msg=$msg#tabs-2"); } } // Load values again from database $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS v.id, $dropnbox, v.steuersatz, v.preis, v.menge, v.kontorahmen, v.id FROM lieferantengutschrift_position v"." WHERE id=$posid"); foreach ($result[0] as $key => $value) { $this->app->Tpl->Set(strtoupper($key), $value); } if (!empty($result)) { $lieferantengutschrift_position_from_db = $result[0]; } else { return; } /* * Add displayed items later * $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email); $this->app->Tpl->Add('EMAIL', $email); $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername); $this->app->YUI->AutoComplete("artikel", "artikelnummer"); */ $this->app->YUI->AutoComplete("sachkonto", "sachkonto", 1); $this->app->Tpl->Set('SACHKONTO', $this->app->erp->ReplaceKontorahmen(false,$lieferantengutschrift_position_from_db['kontorahmen'],false)); $this->app->Tpl->Parse('PAGE', "lieferantengutschrift_position_edit.tpl"); } /** * Get all paramters from html form and save into $input */ public function GetInput(): array { $input = array(); $input['adresse'] = $this->app->Secure->GetPOST('adresse'); $input['rechnung'] = $this->app->Secure->GetPOST('rechnung'); $input['zahlbarbis'] = $this->app->Secure->GetPOST('zahlbarbis'); $input['betrag'] = $this->app->Secure->GetPOST('betrag'); $input['waehrung'] = $this->app->Secure->GetPOST('waehrung'); $input['skonto'] = $this->app->Secure->GetPOST('skonto'); $input['skontobis'] = $this->app->Secure->GetPOST('skontobis'); $input['projekt'] = $this->app->Secure->GetPOST('projekt'); $input['zahlungsweise'] = $this->app->Secure->GetPOST('zahlungsweise'); $input['eingangsdatum'] = $this->app->Secure->GetPOST('eingangsdatum'); $input['rechnungsdatum'] = $this->app->Secure->GetPOST('rechnungsdatum'); $input['kostenstelle'] = $this->app->Secure->GetPOST('kostenstelle'); $input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung'); return $input; } function lieferantengutschrift_menu($id) { $this->app->erp->MenuEintrag("index.php?module=lieferantengutschrift&action=edit&id=$id", "Details"); $this->app->erp->MenuEintrag("index.php?module=lieferantengutschrift&action=list", "Zurück zur Übersicht"); $anzahldateien = $this->app->erp->AnzahlDateien("lieferantengutschrift",$id); if ($anzahldateien > 0) { $anzahldateien = " (".$anzahldateien.")"; } else { $anzahldateien=""; } if ($id != 'NULL') { $this->app->erp->MenuEintrag("index.php?module=lieferantengutschrift&action=dateien&id=$id", "Dateien".$anzahldateien); } $invoiceArr = $this->app->DB->SelectRow("SELECT v.belegnr, a.name, v.status, schreibschutz FROM lieferantengutschrift v LEFT JOIN adresse a ON v.adresse = a.id WHERE v.id='$id' LIMIT 1"); $belegnr = $invoiceArr['belegnr']; $name = $invoiceArr['name']; if($belegnr=='0' || $belegnr=='') { $belegnr ='(Entwurf)'; } $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name lieferantengutschrift $belegnr"); if ($invoiceArr['status'] === 'angelegt' || empty($invoiceArr['status'])) { $this->app->erp->MenuEintrag("index.php?module=lieferantengutschrift&action=freigabe&id=$id",'Freigabe'); } } function lieferantengutschrift_dateien() { $id = $this->app->Secure->GetGET("id"); $this->lieferantengutschrift_menu($id); $this->app->Tpl->Add('UEBERSCHRIFT'," (Dateien)"); $this->app->YUI->DateiUpload('PAGE',"lieferantengutschrift",$id); } function lieferantengutschrift_inlinepdf() { $id = $this->app->Secure->GetGET('id'); $file_attachments = $this->app->erp->GetDateiSubjektObjekt('%','lieferantengutschrift',$id); if (!empty($file_attachments)) { // Try to merge all PDFs $file_paths = array(); foreach ($file_attachments as $file_attachment) { if ($this->app->erp->GetDateiEndung($file_attachment) == 'pdf') { $file_paths[] = $this->app->erp->GetDateiPfad($file_attachment); } } $pdfMerger = $this->app->Container->get('PdfMerger'); $mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf'; try { $pdfMerger->merge($file_paths, $mergeOutputPath); header('Content-type:application/pdf'); header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf'); readfile($mergeOutputPath); $this->app->ExitXentral(); } catch (Exception $exception) { // Just the first PDF foreach ($file_attachments as $file_attachment) { if ($this->app->erp->GetDateiEndung($file_attachment) == 'pdf') { $file_contents = $this->app->erp->GetDatei($file_attachment); header('Content-type:application/pdf'); header('Content-Disposition: attachment;filename=lieferantengutschrift_'.$id.'.pdf'); echo($file_contents); $this->app->ExitXentral(); } } } } $this->app->ExitXentral(); } function lieferantengutschrift_freigabe() { $id = $this->app->Secure->GetGET('id'); $this->app->erp->BelegFreigabe('lieferantengutschrift',$id); $this->app->erp->BelegProtokoll("lieferantengutschrift",$id,"lieferantengutschrift freigegeben"); $this->lieferantengutschrift_edit(); } // Returns true or error message function lieferantengutschrift_freigabeeinkauf($id = null, $text = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } $error = false; if (!$this->lieferantengutschrift_is_freigegeben($id)) { if ($gotoedit) { $this->app->YUI->Message('warning','lieferantengutschrift nicht freigegeben'); $error = true; } else { return('lieferantengutschrift nicht freigegeben '.$this->lieferantengutschrift_get_belegnr($id)); } } $sql = "UPDATE lieferantengutschrift SET freigabe = 1 WHERE id=".$id; $this->app->DB->Update($sql); if (!$text) { $text = "lieferantengutschrift freigegeben (Einkauf)"; } $this->app->erp->BelegProtokoll("lieferantengutschrift",$id,$text); if ($gotoedit) { $this->lieferantengutschrift_edit(); } else { return(true); } } // Returns true or error message function lieferantengutschrift_freigabebuchhaltung($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } $error = false; if (!$this->lieferantengutschrift_is_freigegeben($id)) { if ($gotoedit) { $this->app->YUI->Message('warning','lieferantengutschrift nicht freigegeben'); $error = true; } else { return('lieferantengutschrift nicht freigegeben '.$this->lieferantengutschrift_get_belegnr($id)); } } if (!$error) { // Check accounting $sql = " SELECT vp.id, v.belegnr FROM lieferantengutschrift_position vp LEFT JOIN lieferantengutschrift v ON v.id = vp.lieferantengutschrift WHERE lieferantengutschrift='$id' AND vp.kontorahmen = 0 "; $check = $this->app->DB->SelectArr($sql); if (!empty($check)) { if ($gotoedit) { $this->app->YUI->Message('warning','Kontierung unvollständig'); $error = true; } else { return('Kontierung unvollständig '.$this->lieferantengutschrift_get_belegnr($id)); } } } if (!$error) { $sql = "UPDATE lieferantengutschrift SET rechnungsfreigabe = 1 WHERE freigabe = 1 AND id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("lieferantengutschrift",$id,"lieferantengutschrift freigegeben (Buchhaltung)"); } if ($gotoedit) { $this->lieferantengutschrift_edit(); } else { return(true); } } // Returns true or error message function lieferantengutschrift_freigabebezahlt($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } if (!$this->lieferantengutschrift_is_freigegeben($id)) { if ($gotoedit) { $this->app->YUI->Message('warning','lieferantengutschrift nicht freigegeben'); $error = true; } else { return('lieferantengutschrift nicht freigegeben '.$this->lieferantengutschrift_get_belegnr($id)); } } if (!$error) { $sql = "UPDATE lieferantengutschrift SET bezahlt = 1 WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("lieferantengutschrift",$id,"lieferantengutschrift als bezahlt markiert"); if ($gotoedit) { $this->lieferantengutschrift_edit(); } else { return(true); } } } function lieferantengutschrift_abschliessen($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } $sql = "SELECT freigabe, rechnungsfreigabe, bezahlt, betrag FROM lieferantengutschrift WHERE id =".$id; $lieferantengutschrift = $this->app->DB->SelectRow($sql); if ($lieferantengutschrift['freigabe'] != 1) { $einkauf_check = $this->check_positions($id,$lieferantengutschrift['betrag']); if ($einkauf_check['pos_ok']) { $this->lieferantengutschrift_freigabeeinkauf($id); $lieferantengutschrift['freigabe'] = 1; } } $anzahldateien = $this->app->erp->AnzahlDateien("lieferantengutschrift",$id); if (!empty($anzahldateien) && $lieferantengutschrift['freigabe'] && $lieferantengutschrift['rechnungsfreigabe'] && $lieferantengutschrift['bezahlt']) { $sql = "UPDATE lieferantengutschrift SET status = 'abgeschlossen' WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("lieferantengutschrift",$id,"lieferantengutschrift abgeschlossen"); if ($gotoedit) { $this->lieferantengutschrift_edit(); } } } function lieferantengutschrift_ruecksetzeneinkauf($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } $sql = "UPDATE lieferantengutschrift SET freigabe = 0 WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("lieferantengutschrift",$id,"lieferantengutschrift rückgesetzt (Einkauf)"); if ($gotoedit) { $this->lieferantengutschrift_edit(true); } } function lieferantengutschrift_ruecksetzenbuchhaltung($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } $sql = "UPDATE lieferantengutschrift SET rechnungsfreigabe = 0 WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("lieferantengutschrift",$id,"lieferantengutschrift rückgesetzt (Buchhaltung)"); if ($gotoedit) { $this->lieferantengutschrift_edit(); } } function lieferantengutschrift_ruecksetzenbezahlt($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } $sql = "UPDATE lieferantengutschrift SET bezahlt = 0 WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("lieferantengutschrift",$id,"lieferantengutschrift bezahlt rückgesetzt"); if ($gotoedit) { $this->lieferantengutschrift_edit(); } } /* function lieferantengutschrift_schreibschutz($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } $sql = "UPDATE lieferantengutschrift SET schreibschutz = 0 WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("lieferantengutschrift",$id,"lieferantengutschrift Schreibschutz entfernt"); if ($gotoedit) { $this->lieferantengutschrift_edit(); } } */ public function lieferantengutschrift_minidetail($parsetarget='',$menu=true) { $id = $this->app->Secure->GetGET('id'); $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS v.id, v.belegnr, v.status_beleg, v.schreibschutz, v.rechnung, ".$this->app->erp->FormatDate('v.zahlbarbis', 'zahlbarbis').", ".$this->app->erp->FormatMengeBetrag('v.betrag')." AS betrag, v.skonto, ".$this->app->erp->FormatDate('v.skontobis', 'skontobis').", v.freigabe, v.freigabemitarbeiter, p.abkuerzung AS projekt, v.status, v.bezahlt, v.firma, v.logdatei, v.waehrung, v.zahlungsweise, ".$this->app->erp->FormatDate('v.eingangsdatum', 'eingangsdatum').", ".$this->app->erp->FormatDate('v.rechnungsdatum', 'rechnungsdatum').", v.rechnungsfreigabe, k.nummer as kostenstelle, v.beschreibung, v.internebemerkung, v.id, CONCAT(a.lieferantennummer,' ',a.name) AS adresse FROM lieferantengutschrift v LEFT JOIN adresse a ON a.id = v.adresse LEFT JOIN projekt p ON a.projekt = p.id LEFT JOIN kostenstellen k ON v.kostenstelle = k.id WHERE v.id='$id'"); foreach ($result[0] as $key => $value) { $this->app->Tpl->Set(strtoupper($key), $value); } if (!empty($result[0])) { $lieferantengutschrift_from_db = $result[0]; } $positionen = $this->app->DB->SelectArr("SELECT vp.id, vp.sort, art.name_de, art.nummer, vp.menge, vp.preis, vp.steuersatz, CONCAT(skv.sachkonto,' ',skv.beschriftung) AS sachkonto, '' FROM lieferantengutschrift_position vp INNER JOIN artikel art ON art.id = vp.artikel LEFT JOIN lieferantengutschrift v ON v.id = vp.lieferantengutschrift LEFT JOIN adresse adr ON adr.id = v.adresse LEFT JOIN kontorahmen skv ON skv.id = vp.kontorahmen WHERE lieferantengutschrift='$id' ORDER by vp.sort ASC"); $tmp = new EasyTable($this->app); $tmp->headings = array('Pos.','Artikel-Nr.','Artikel','Menge','Preis','Steuersatz','WIRDUNTENGEFÜLLTWARUMAUCHIMMER'); $betrag_netto = 0; $betrag_brutto = 0; $steuer_normal = 0; $steuer_ermaessigt = 0; foreach ($positionen as $position) { $tmpsteuersatz = null; $tmpsteuertext = null; $erloes = null; $this->app->erp->GetSteuerPosition("lieferantengutschrift",$position['id'],$tmpsteuersatz,$tmpsteuertext,$erloes); $position['steuersatz_berechnet'] = $tmpsteuersatz; $position['steuertext_berechnet'] = $tmpsteuertext; $position['steuererloes_berechnet'] = $erloes; $betrag_netto += ($position['menge']*$position['preis']); $betrag_brutto += ($position['menge']*$position['preis'])*(1+($tmpsteuersatz/100)); $row = array( $position['sort'], $position['nummer'], $position['name_de'], $position['menge'], $position['preis'], $position['steuersatz_berechnet'], $position['sachkonto'] ); $tmp->AddRow($row); } $row = array( '', '', '', '', 'Betrag Positionen netto', 'Betrag Positionen brutto' ); $tmp->AddRow($row); $row = array( '', '', '', '', round($betrag_netto,2), round($betrag_brutto,2) ); $tmp->AddRow($row); $tmp->DisplayNew('ARTIKEL',"Sachkonto","noAction"); $tmp = new EasyTable($this->app); $tmp->Query("SELECT zeit,bearbeiter,grund FROM lieferantengutschrift_protokoll WHERE lieferantengutschrift='$id' ORDER by zeit DESC",0,""); $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); if($parsetarget=='') { $this->app->Tpl->Output('lieferantengutschrift_minidetail.tpl'); $this->app->ExitXentral(); } $this->app->Tpl->Parse($parsetarget,'lieferantengutschrift_minidetail.tpl'); } function lieferantengutschrift_is_freigegeben($id) { $sql = "SELECT belegnr FROM lieferantengutschrift WHERE id='$id' AND status IN ('freigegeben','abgeschlossen') "; $check = $this->app->DB->SelectArr($sql); if (empty($check)) { return(false); } else { return(true); } } function lieferantengutschrift_get_belegnr($id) { return($this->app->DB->Select("SELECT belegnr FROM lieferantengutschrift WHERE id =".$id)); } /* Calculate steuersatz Get from Check address first, if foreign, then steuersatz = 0 if not foreign there are three cases: befreit = 0, ermaessigt, normal if not befreit, get from projekt or firmendaten */ function get_steuersatz($umsatzsteuer, $lieferantengutschrift) { if (is_numeric($umsatzsteuer)) { return($umsatzsteuer); } if ($umsatzsteuer == 'befreit') { return(0); } $adresse = $this->app->DB->Select("SELECT adresse FROM lieferantengutschrift WHERE id=".$lieferantengutschrift); $umsatzsteuer_lieferant = $this->app->DB->Select("SELECT umsatzsteuer_lieferant FROM adresse WHERE id=".$adresse); /* inland, eu-lieferung, import*/ if (in_array($umsatzsteuer_lieferant,array('import','eulieferung'))) { return(0); } $projekt = $this->app->DB->Select("SELECT projekt FROM lieferantengutschrift WHERE id=".$lieferantengutschrift); $steuersatz_projekt = $this->app->DB->SelectRow("SELECT steuersatz_normal, steuersatz_ermaessigt FROM projekt WHERE id ='".$projekt."'"); $steuersatz_normal_projekt = $steuersatz_projekt['steuer_normal']; $steuersatz_ermaessigt_projekt = $steuersatz_projekt['steuer_ermaessigt']; $steuersatz_normal = $this->app->erp->Firmendaten('steuersatz_normal'); $steuersatz_ermaessigt = $this->app->erp->Firmendaten('steuersatz_ermaessigt'); switch($umsatzsteuer) { case 'normal': if (!empty($steuersatz_normal_projekt)) { return($steuersatz_normal_projekt); } else { return($steuersatz_normal); } break; case 'ermaessigt': if (!empty($steuersatz_ermaessigt_projekt)) { return($steuersatz_ermaessigt_projekt); } else { return($steuersatz_ermaessigt); } break; default: return(0); break; } } // Check positions and return status and values function check_positions($id, $bruttobetrag_lieferantengutschrift) : array { $result = array( "pos_ok" => false, "betrag_netto" => 0, "betrag_brutto" => 0, "rundungsdifferenz" => 0, "bruttobetrag_lieferantengutschrift" => $bruttobetrag_lieferantengutschrift ); if (empty($id)) { return($result); } // Summarize positions $sql = "SELECT * FROM lieferantengutschrift_position WHERE lieferantengutschrift = ".$id; $positionen = $this->app->DB->SelectArr($sql); if (!empty($positionen)) { $betrag_netto = 0; $betrag_brutto = 0; $betrag_brutto_pos_summe = 0; $steuer_normal = 0; $steuer_ermaessigt = 0; /* Normal: umsatzsteuer leer, steuersatz = leer Ermäßigt: umsatzsteuer ermaessigt, steuersatz = -1 Befreit: umsatzsteuer befreit, steursatz = -1 Individuell: umsatzsteuer leer, steuersatz = wert */ foreach ($positionen as $position) { $tmpsteuersatz = null; $tmpsteuertext = null; $erloes = null; $this->app->erp->GetSteuerPosition("lieferantengutschrift",$position['id'],$tmpsteuersatz,$tmpsteuertext,$erloes); $position['steuersatz_berechnet'] = $tmpsteuersatz; $position['steuertext_berechnet'] = $tmpsteuertext; $position['steuererloes_berechnet'] = $erloes; $betrag_netto += ($position['menge']*$position['preis']); $betrag_brutto += ($position['menge']*$position['preis'])*(1+($tmpsteuersatz/100)); $betrag_brutto_pos_summe += round(($position['menge']*$position['preis'])*(1+($tmpsteuersatz/100)),2); } $result['betrag_netto'] = round($betrag_netto,2); $result['betrag_brutto'] = round($betrag_brutto,2); if ($bruttobetrag_lieferantengutschrift == round($betrag_brutto,2)) { $result['pos_ok'] = true; } else if (round($bruttobetrag_lieferantengutschrift,2) == round($betrag_brutto_pos_summe,2)) { $result['pos_ok'] = true; if (round($bruttobetrag_lieferantengutschrift,2) != round($betrag_brutto_pos_summe,2)) { $result['rundungsdifferenz'] = round(round($betrag_brutto,2) - $betrag_brutto_pos_summe,2); } } } return($result); } }