app = $app; if ($intern) return; $this->app->ActionHandlerInit($this); $this->app->ActionHandler("list", "mahnwesen_list"); $this->app->ActionHandler("stufe_list", "mahnwesen_stufe_list"); $this->app->ActionHandler("create", "mahnwesen_edit"); // This automatically adds a "New" button $this->app->ActionHandler("edit", "mahnwesen_edit"); $this->app->ActionHandler("einstellungen", "mahnwesen_einstellungen"); $this->app->ActionHandler("delete", "mahnwesen_delete"); $this->app->DefaultActionHandler("list"); $this->app->ActionHandlerListen($app); } public function Install() { /* Fill out manually later */ } public function TableSearch($app, $name, $erlaubtevars) { switch ($name) { case "mahnwesen_list": $extended_mysql55 = ",'de_DE'"; $allowed['mahnwesen_list'] = array('list'); $heading = array('', '', 'Rechnung', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)', 'Währung', 'Zahlstatus', 'Differenz', 'Status','Fällig am','Tage','Mahnstufe','Brief','E-Mail','Gemahnt','Mahn-Datum','Sperre','Interne Bemerkung','Menü'); $width = array('1%','1%','01%', '01%', '01%', '05%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '20%', '1%'); // Fill out manually later // columns that are aligned right (numbers etc) // $alignright = array(4,5,6,7,8); $mahnwesen_stufe_filter = $this->app->DB->real_escape_string($this->app->User->GetParameter('mahnwesen_stufe_filter')); $faellig_datum = "DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY)"; $faellig_tage = "DATEDIFF(CURRENT_DATE,DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY))"; $mahn_druck = "if(m.druck,'Ja','')"; $mahn_mail = "if(m.mail,'Ja','')"; $mahn_versendet = "if(r.versendet_mahnwesen,'Ja','')"; $findcols = array('r.id','r.id','r.belegnr', 'r.datum', 'r.kundennummer','r.name', 'r.land','p.abkuerzung','r.zahlungsweise','r.soll','r.waehrung','r.zahlungsstatus','r.soll','r.status',$faellig_datum,$faellig_tage,'m.name',$mahn_druck,$mahn_mail,$mahn_versendet,'mahnwesen_datum'); $searchsql = array('r.belegnr', 'r.name', $faellig_datum, 'r.kundennummer'); $defaultorder = 1; $defaultorderdesc = 0; $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . "
"; $sql_tables = "rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid LEFT JOIN mahnwesen m ON r.mahnwesen = m.id"; $sql = "SELECT SQL_CALC_FOUND_ROWS r.id, $dropnbox, r.belegnr, ".$app->erp->FormatDateShort('r.datum')." as vom, if(r.kundennummer <> '',r.kundennummer,adr.kundennummer), CONCAT(" . $app->erp->MarkerUseredit("r.name", "r.useredittimestamp") . ", if(r.internebezeichnung!='',CONCAT('
',r.internebezeichnung,''),'')) as kunde, r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise, FORMAT(r.soll,2{$extended_mysql55} ) as soll, ifnull(r.waehrung,'EUR'), r.zahlungsstatus as zahlung, if(r.soll-r.ist!=0 AND r.ist > 0,FORMAT(r.ist-r.soll,2{$extended_mysql55}),FORMAT((r.soll-r.ist)*-1,2{$extended_mysql55})) as fehlt, if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status, ".$app->erp->FormatDateShort($faellig_datum)." as faellig_datum, if(".$faellig_tage.">0,".$faellig_tage.",'') as faellig_tage, m.name, ".$mahn_druck.", ".$mahn_mail.", ".$mahn_versendet.", if(mahnwesen_datum <> '0000-00-00',".$app->erp->FormatDateShort('mahnwesen_datum').",''), if(r.mahnwesen_gesperrt,'Ja',''), REPLACE(r.mahnwesen_internebemerkung,'\r\n','
'), r.id FROM ".$sql_tables; $where = " r.belegnr <> '' AND r.status <> 'storniert'"; if (!empty($mahnwesen_stufe_filter)) { $where .= " AND m.id = '".$mahnwesen_stufe_filter."' AND r.versendet_mahnwesen "; } // Toggle filters $this->app->Tpl->Add('JQUERYREADY', "$('#zu_mahnen').click( function() { fnFilterColumn1( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#inkl_bezahlte').click( function() { fnFilterColumn2( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#inkl_gesperrte').click( function() { fnFilterColumn3( 0 ); } );"); for ($r = 1;$r <= 3;$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 = $app->Secure->GetGET("more_data1"); if ($more_data1 == 1 && empty($mahnwesen_stufe_filter)) { $where .= " AND NOT r.versendet_mahnwesen AND r.mahnwesen <> ''"; } else { } $more_data2 = $app->Secure->GetGET("more_data2"); if ($more_data2 == 1) { } else { $where .= " AND r.zahlungsstatus <> 'bezahlt' "; } $more_data3 = $app->Secure->GetGET("more_data3"); if ($more_data3 == 1) { } else { $where .= " AND NOT r.mahnwesen_gesperrt "; } // END Toggle filters $count = "SELECT count(DISTINCT r.id) FROM ".$sql_tables." WHERE $where"; // $groupby = ""; break; case "mahnwesen_einstellungen": $allowed['mahnwesen_list'] = array('list'); $heading = array('', 'Tage', 'Name', 'Gebuehr', 'E-Mail', 'Druck', '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('m.id', 'm.tage','m.name', 'm.gebuehr', 'm.mail','m.druck'); $searchsql = array('m.name','m.tage', 'm.gebuehr', 'm.versandmethode'); $defaultorder = 1; $defaultorderdesc = 1; $dropnbox = "'' AS `open`"; $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; $sql = "SELECT SQL_CALC_FOUND_ROWS m.id, $dropnbox, m.tage, m.name, ".$this->app->erp->FormatMenge('m.gebuehr',2).", if(m.mail,'Ja',''), if(m.druck,'Ja',''), m.id FROM mahnwesen m"; $where = "1"; $count = "SELECT count(DISTINCT id) FROM mahnwesen WHERE $where"; // $groupby = ""; break; } $erg = false; foreach ($erlaubtevars as $k => $v) { if (isset($$v)) { $erg[$v] = $$v; } } return $erg; } // For Tab-highlighting function mahnwesen_stufe_list() { $this->mahnwesen_list(); } function mahnwesen_list() { $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=list", "Übersicht"); if($this->app->Secure->GetPOST('sel_aktion') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) { $drucker = $this->app->Secure->GetPOST('seldrucker'); $aktion = $this->app->Secure->GetPOST('sel_aktion'); $auswahl = $this->app->Secure->GetPOST('auswahl'); if($drucker > 0) { $this->app->erp->BriefpapierHintergrundDisable($drucker); } if(is_array($auswahl)) { foreach($auswahl as $auswahlKey => $auswahlValue) { if((int)$auswahlValue > 0) { $auswahl[$auswahlKey] = (int)$auswahlValue; } else { unset($auswahl[$auswahlKey]); } } switch($aktion) { case 'bezahlt': $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='bezahlt', bezahlt_am = now(), mahnwesenfestsetzen='1',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')'); break; case 'offen': $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen',bezahlt_am = NULL, mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')'); break; case 'mahnung_reset': $sql = "UPDATE rechnung SET mahnwesen='', versendet_mahnwesen ='', mahnwesen_datum = '0000-00-00' WHERE id IN (".implode(', ',$auswahl).')'; $this->app->DB->Update($sql); break; case 'mahnen': $mails = 0; $drucke = 0; foreach ($auswahl as $rechnung_id) { $mahnung = $this->MahnwesenMessage($rechnung_id); // Check first if (empty($mahnung)) { continue; } if ($mahnung['mail'] && empty($mahnung['rechnung']['email'])) { $msg .= "
Keine E-Mail-Adresse hinterlegt bei Rechnung ".$mahnung['rechnung']['belegnr'].".
"; continue; } if ($mahnung['druck']) { $drucker = $this->app->Secure->GetPOST('seldrucker'); if($drucker > 0) { $this->app->erp->BriefpapierHintergrundDisable($drucker); } else { $msg .= "
Kein Drucker gewählt.
"; break; } } // Create PDF if(class_exists('RechnungPDFCustom')) { $Brief = new RechnungPDFCustom($this->app,$projekt); } else { $Brief = new RechnungPDF($this->app,$projekt); } $Brief->GetRechnung($rechnung_id,$mahnung['betreff'],0,null,$mahnung['body']); $tmpfile = $Brief->displayTMP(); $fileid = $this->app->erp->CreateDatei($Brief->filename,$mahnung['betreff'],"","",$tmpfile,$this->app->User->GetName()); $this->app->erp->AddDateiStichwort($fileid,'mahnung','rechnung',$rechnung_id); if ($mahnung['druck']) { $this->app->printer->Drucken($drucker,$tmpfile); $this->MahnungCRM('brief',$mahnung['rechnung'], $mahnung['betreff'], $mahnung['body'],$fileid,$Brief->filename); $this->app->erp->RechnungProtokoll($rechnung_id,'Mahnung gedruckt'); $drucke++; } if ($mahnung['mail']) { $senderName = $this->app->User->GetName()." (".$this->app->erp->GetFirmaAbsender().")"; $senderAddress = $this->app->erp->GetFirmaMail(); // function MailSend($from,$from_name,$to,$to_name,$betreff,$text,$files="",$projekt="",$signature=true,$cc="",$bcc="", $system = false) $result = $this->app->erp->MailSend( $senderAddress, $senderName, $mahnung['rechnung']['email'], $mahnung['rechnung']['email'], htmlentities($mahnung['betreff']), htmlentities($mahnung['body']), [$tmpfile], $mahnung['rechnung']['projekt'], true, $cc, '', true ); if ($result = 0) { $msg .= "
Fehler beim E-Mail-Versand bei Rechnung ".$mahnung['rechnung']['belegnr'].".
"; continue; } $this->MahnungCRM('email',$mahnung['rechnung'], $mahnung['betreff'], $mahnung['body'],$fileid,$Brief->filename); $this->app->erp->RechnungProtokoll($rechnung_id,'Mahnung versendet'); $mails++; } unlink($tmpfile); $sql = "UPDATE rechnung set mahnwesen_datum = CURRENT_DATE, versendet_mahnwesen = 1 WHERE id IN (".implode(', ',$auswahl).')'; $this->app->DB->Update($sql); } $msg .= "
$mails E-Mails versendet, $drucke Dokumente gedruckt.
"; break; } } } // ende ausfuehren // Refresh status if($this->app->Secure->GetPOST('mahnstufe_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) { $this->app->erp->rechnung_zahlstatus_berechnen(); } // Create tabs $sql = " SELECT r.id, r.mahnwesen, r.versendet_mahnwesen, rid_mid.mahnwesen_neu, rid_mid.name FROM rechnung r INNER JOIN ( SELECT id_tage.id, m.id AS mahnwesen_neu, m.name, m.tage FROM mahnwesen m INNER JOIN( SELECT id, MAX(tage) AS tage FROM ( SELECT r.id, m.tage FROM rechnung r INNER JOIN mahnwesen m ON DATEDIFF( CURRENT_DATE, DATE_ADD( r.datum, INTERVAL r.zahlungszieltage DAY ) ) > m.tage WHERE r.zahlungsstatus = 'offen' ORDER BY `r`.`id` ASC ) temp GROUP BY id ) id_tage ON m.tage = id_tage.tage ) rid_mid ON r.id = rid_mid.id ORDER BY rid_mid.tage "; $offene_rechnungen = $this->app->DB->SelectArr($sql); foreach ($offene_rechnungen as $offene_rechnung) { if ($offene_rechnung['mahnwesen'] != $offene_rechnung['mahnwesen_neu']) { $sql = "UPDATE rechnung set mahnwesen = ".$offene_rechnung['mahnwesen_neu'].", versendet_mahnwesen = 0 WHERE id = ".$offene_rechnung['id']; $this->app->DB->Update($sql); } } $menus = $this->app->DB->SelectArr(" SELECT m.id mahnung, m.name, SUM(if(r.versendet_mahnwesen = 1,1,0)) anzahl FROM mahnwesen m LEFT JOIN rechnung r ON m.id = r.mahnwesen WHERE r.id IS NULL OR ( r.zahlungsstatus <> 'bezahlt' AND r.mahnwesen_gesperrt <> 1 ) GROUP BY m.id ORDER BY m.tage ASC "); foreach ($menus as $menu) { $suffix = ""; if ($menu['anzahl']) { $suffix = " (".$menu['anzahl'].")"; } $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=stufe_list&stufe=".$menu['mahnung'], $this->app->DB->real_escape_string($menu['name']).$suffix); } if (!empty($msg)) { $this->app->Tpl->Set('MESSAGE', $msg); } if($this->app->erp->RechteVorhanden('rechnung', 'manuellbezahltmarkiert')){ $this->app->Tpl->Set('ALSBEZAHLTMARKIEREN', ''); } $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker'))); $mahnwesen_stufe_filter = $this->app->Secure->GetGET('stufe'); $this->app->User->SetParameter('mahnwesen_stufe_filter', $mahnwesen_stufe_filter); if (!empty($mahnwesen_stufe_filter)) { $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"Stufe: ".$this->app->DB->Select("SELECT name FROM mahnwesen WHERE id = ".$mahnwesen_stufe_filter." LIMIT 1")); $this->app->Tpl->Set('ZU_MAHNEN_HIDDEN', 'hidden'); } $this->app->YUI->TableSearch('TAB1', 'mahnwesen_list', "show", "", "", basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('PAGE', "mahnwesen_list.tpl"); } function mahnwesen_einstellungen() { $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=einstellungen", "Übersicht"); $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=create", "Neu anlegen"); $this->app->erp->MenuEintrag("index.php?module=einstellungen&action=list", "Zurück"); $this->app->erp->Headlines('Mahnwesen Einstellungen'); $this->app->YUI->TableSearch('TAB1', 'mahnwesen_einstellungen', "show", "", "", basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('PAGE', "mahnwesen_einstellungen.tpl"); } public function mahnwesen_delete() { $id = (int) $this->app->Secure->GetGET('id'); $this->app->DB->Delete("DELETE FROM `mahnwesen` WHERE `id` = '{$id}'"); $this->app->Tpl->Set('MESSAGE', "
Der Eintrag wurde gelöscht.
"); $this->mahnwesen_einstellungen(); } /* * Edit mahnwesen item * If id is empty, create a new one */ function mahnwesen_edit() { $id = $this->app->Secure->GetGET('id'); // Check if other users are editing this id if($this->app->erp->DisableModul('artikel',$id)) { return; } $this->app->Tpl->Set('ID', $id); $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=edit&id=$id", "Details"); $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=einstellungen", "Zurück zur Übersicht"); $id = $this->app->Secure->GetGET('id'); $input = $this->GetInput(); $submit = $this->app->Secure->GetPOST('submit'); if (empty($id)) { // New item $id = 'NULL'; } if ($submit != '') { // Write to database // Add checks here $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 mahnwesen (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update; $this->app->DB->Update($sql); if ($id == 'NULL') { $msg = $this->app->erp->base64_url_encode("
Das Element wurde erfolgreich angelegt.
"); header("Location: index.php?module=mahnwesen&action=einstellungen&msg=$msg"); } else { $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
"); } } // Load values again from database $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS m.id, $dropnbox, m.name, m.tage, m.gebuehr, m.mail, m.druck, m.id FROM mahnwesen m"." WHERE id=$id"); foreach ($result[0] as $key => $value) { $this->app->Tpl->Set(strtoupper($key), $value); } /* * Add displayed items later * $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email); $this->app->Tpl->Add('EMAIL', $email); $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername); */ $this->app->Tpl->Set('MAIL', $result[0]['mail']?'checked':''); $this->app->Tpl->Set('DRUCK', $result[0]['druck']?'checked':''); $this->app->Tpl->Parse('PAGE', "mahnwesen_edit.tpl"); } /** * Get all paramters from html form and save into $input */ public function GetInput(): array { $input = array(); $input['name'] = $this->app->Secure->GetPOST('name'); $input['tage'] = $this->app->Secure->GetPOST('tage'); $input['gebuehr'] = $this->app->Secure->GetPOST('gebuehr'); $input['mail'] = $this->app->Secure->GetPOST('mail')?'1':'0'; $input['druck'] = $this->app->Secure->GetPOST('druck')?'1':'0'; return $input; } /* * Set all fields in the page corresponding to $input */ function SetInput($input) { $this->app->Tpl->Set('NAME', $input['name']); $this->app->Tpl->Set('TAGE', $input['tage']); $this->app->Tpl->Set('GEBUEHR', $input['gebuehr']); $this->app->Tpl->Set('MAIL', $input['mail']); $this->app->Tpl->Set('DRUCK', $input['druck']); } /* * Constuct the Mahnwesen message according to GeschÀftsbriefVorlage * Returns Array (string betreff, string body, boolean mail, boolean druck, array rechnung) */ function MahnwesenMessage($rechnung_id) { $sql = "SELECT r.*, ".$this->app->erp->FormatDate('datum')." datum, ".$this->app->erp->FormatDate('CURRENT_DATE')." heute, m.name as mahn_name, m.tage as mahn_tage, m.gebuehr as mahn_gebuehr, m.mail as mahn_mail, m.druck as mahn_druck FROM rechnung r INNER JOIN mahnwesen m ON r.mahnwesen = m.id WHERE r.id = ".$rechnung_id." LIMIT 1"; $rechnungarr = $this->app->DB->SelectArr($sql)[0]; if (empty($rechnungarr)) { return; } $adresse = $rechnungarr['adresse']; if($sprache==''){ $sprache = $rechnungarr['sprache']; } if($sprache==''){ $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); } $kundennummer = $rechnungarr['kundennummer']; $projekt = $rechnungarr['projekt']; $auftrag= $rechnungarr['auftrag']; $buchhaltung= $rechnungarr['buchhaltung']; $lieferschein = $rechnungarr['lieferschein']; $lieferscheinid = $lieferschein; if($lieferscheinid){ $lieferschein = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); }else{ $lieferschein = ''; } $bestellbestaetigung = $rechnungarr['kundennummer']; $datum = $rechnungarr['datum_de']; $datum_sql = $rechnungarr['datum']; $belegnr = $rechnungarr['belegnr']; $doppel = $rechnungarr['doppel']; $freitext = $rechnungarr['freitext']; $ustid = $rechnungarr['ustid']; $soll = $rechnungarr['soll']; $ist = $rechnungarr['ist']; $land = $rechnungarr['land']; $mahnwesen_datum = $rechnungarr['mahnwesen_datum']; $mahnwesen_datum_deutsch = $rechnungarr['mahnwesen_datum_de']; $zahlungsweise = $rechnungarr['zahlungsweise']; $zahlungsstatus = $rechnungarr['zahlungsstatus']; $zahlungszieltage = $rechnungarr['zahlungszieltage']; $zahlungszieltageskonto = $rechnungarr['zahlungszieltageskonto']; $zahlungszielskonto = $rechnungarr['zahlungszielskonto']; $waehrung = $rechnungarr['waehrung']; $zahlungdatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltage DAY),'%d.%m.%Y') FROM rechnung WHERE id='$rechnung_id' LIMIT 1"); if($_datum!=null) { $mahnwesen_datum = $this->app->String->Convert($_datum,'%1.%2.%3','%3-%2-%1'); $mahnwesen_datum_deutsch = $_datum; } $zahlungsweise = strtolower($zahlungsweise); /* if($als=='zahlungserinnerung') { $body = $this->GetGeschaeftsBriefText("MahnwesenZahlungserinnerung",$sprache,$projekt,"rechnung",$rechnung_id); $tage = $this->GetKonfiguration('mahnwesen_m1_tage'); } else if($als=='mahnung1') { $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung1",$sprache,$projekt,"rechnung",$rechnung_id); $mahngebuehr = $this->GetKonfiguration('mahnwesen_m1_gebuehr'); $tage = $this->GetKonfiguration('mahnwesen_m2_tage'); } else if($als=='mahnung2') { $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung2",$sprache,$projekt,"rechnung",$rechnung_id); $tage = $this->GetKonfiguration('mahnwesen_m3_tage'); $mahngebuehr = $this->GetKonfiguration('mahnwesen_m2_gebuehr'); } else if($als=='mahnung3') { $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung3",$sprache,$projekt,"rechnung",$rechnung_id); $tage = $this->GetKonfiguration('mahnwesen_ik_tage'); $mahngebuehr = $this->GetKonfiguration('mahnwesen_m3_gebuehr'); } else if($als=='inkasso') { $body = $this->GetGeschaeftsBriefText("MahnwesenInkasso",$sprache,$projekt,"rechnung",$rechnung_id); //$tage = $this->GetKonfiguration("mahnwesen_ik_tage"); $tage = 3; //eigentlich vorbei $mahngebuehr = $this->GetKonfiguration('mahnwesen_ik_gebuehr'); } else { $body = $this->app->erp->Beschriftung("dokument_anschreiben"); } */ $betreff = $this->app->erp->GetGeschaeftsBriefBetreff($rechnungarr['mahn_name'],$sprache,$projekt,"rechnung",$rechnung_id); $body = $this->app->erp->GetGeschaeftsBriefText($rechnungarr['mahn_name'],$sprache,$projekt,"rechnung",$rechnung_id); if (empty($betreff) || empty($body)) { throw new QueryFailureException("Geschaeftsbrief-Vorlage nicht gefunden: ''".$rechnungarr['mahn_name']."'"); } $offen = $this->app->erp->GetSaldoDokument($rechnung_id, 'rechnung'); if($tage <=0) $tage = 0; /* $datummahnung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$mahnwesen_datum', INTERVAL $tage DAY),'%d.%m.%Y')"); $datumrechnungzahlungsziel= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $zahlungszieltage DAY),'%d.%m.%Y')"); $tage_ze = $zahlungszieltage + $this->GetKonfiguration('mahnwesen_m1_tage'); $datumzahlungserinnerung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $tage_ze DAY),'%d.%m.%Y')");*/ // checkstamp $this->CheckStamp("jhdskKUHsiusakiakuhsd"); // errechnet aus laufzeit und kundenid // wenn es nicht drinnen ist darf es nicht gehen /* if($mahngebuehr=='' || !is_numeric($mahngebuehr)) $mahngebuehr = 0; //$offen= '11,23'; $body = str_replace('{RECHNUNG}',$belegnr,$body); $body = str_replace('{BELEGNR}',$belegnr,$body); $body = str_replace('{DATUMRECHNUNG}',$datum,$body); $body = str_replace('{TAGE}',$tage,$body); $body = str_replace('{OFFEN}',$this->app->erp->formatMoney(-$offen['betrag'],$offen['waehrung']),$body); $body = str_replace('{SOLL}',$this->app->erp->formatMoney($soll,$waehrung),$body); $body = str_replace('{SUMME}',$this->app->erp->formatMoney($soll - $ist + $mahngebuehr,$waehrung),$body); $body = str_replace('{IST}',$this->app->erp->formatMoney($ist,$waehrung),$body); $body = str_replace('{DATUM}',$datummahnung,$body); $body = str_replace('{MAHNGEBUEHR}',$this->app->erp->formatMoney($mahngebuehr,$waehrung),$body); $body = str_replace('{OFFENMITMAHNGEBUEHR}',$this->app->erp->formatMoney($mahngebuehr + $soll - $ist,$waehrung),$body); $body = str_replace('{MAHNDATUM}',$mahnwesen_datum_deutsch,$body); // Im Protokoll suchen Datum von Zahlungserinnerung, Mahnung 1, Mahnung 2, Mahnung 3 $mahnung1 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$rechnung_id' AND grund LIKE 'Mahnung1 versendet%' ORDER by Zeit DESC LIMIT 1"); $mahnung2 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$rechnung_id' AND grund LIKE 'Mahnung2 versendet%' ORDER by Zeit DESC LIMIT 1"); $mahnung3 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$rechnung_id' AND grund LIKE 'Mahnung3 versendet%' ORDER by Zeit DESC LIMIT 1"); $body = str_replace('{DATUMMAHNUNG1}',$mahnung1,$body); $body = str_replace('{DATUMMAHNUNG2}',$mahnung2,$body); $body = str_replace('{DATUMMAHNUNG3}',$mahnung3,$body); $body = str_replace('{DATUMZAHLUNGSERINNERUNGFAELLIG}',$datumzahlungserinnerung,$body); $body = str_replace('{DATUMZAHLUNGSERINNERUNG}',$datumzahlungserinnerung,$body); $body = str_replace('{DATUMRECHNUNGZAHLUNGSZIEL}',$datumrechnungzahlungsziel,$body);*/ $mapping = [ 'rechnung' => $belegnr, 'belegnr' => $belegnr, 'datum' => $datum_sql, 'offen' => $this->app->erp->EUR(-$offen['betrag'])." ".$offen['waehrung'], 'mahngebuehr' => $this->app->erp->EUR($rechnungarr['mahn_gebuehr']), 'heute' => $rechnungarr['heute'] ]; $betreff = $this->app->erp->ParseVars($mapping,$betreff); $body = $this->app->erp->ParseVars($mapping,$body); $body = $this->app->erp->ParseUserVars('rechnung',$rechnung_id,$body); return(array( 'betreff' => $betreff, 'body' => $body, 'mail' => $rechnungarr['mahn_mail'] != 0, 'druck' => $rechnungarr['mahn_druck'] != 0, 'adresse' => $rechnungarr['adresse'], 'empfaenger' => $rechnungarr['email'], 'projekt' => $rechnungarr['projekt'], 'rechnung' => $rechnungarr )); } /* * Create CRM entry for mahnung * typ = brief, email */ function MahnungCRM(string $typ, array $rechnung, $betreff, $text, $fileid, $filename) { $data = array(); $data['typ'] = $typ; $data['projekt'] = $rechnung['projekt']; $data['datum'] = date('Y-m-d'); $data['uhrzeit'] = date('Y-m-d H:i:s'); $data['user'] = $rechnung['adresse']; $data['an'] = $rechnung['name']; $data['adresse'] = $rechnung['strasse']; $data['plz'] = $rechnung['plz']; $data['ort'] = $rechnung['ort']; $data['betreff'] = $betreff; $data['content'] = $text; $data['email_an'] = $rechnung['email']; $data['sent'] = 1; $crm_id = $this->app->erp->DokumentCreate($data,$this->app->User->GetAdresse()); $this->app->erp->AddDateiStichwort($fileid,'anhang','dokument',$crm_id); } }