app= $app; $this->id = $id; $this->data = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM zahlungsweisen WHERE id = %d', $id ) ); $einstellungen_json = $this->data['einstellungen_json']; if(!empty($einstellungen_json)) { $einstellungen_json = json_decode($einstellungen_json,true); } if(!empty($einstellungen_json)) { $this->einstellungen = $einstellungen_json; } else{ $this->einstellungen = array(); } } /** * @param string $doctype * @param int $doctypeId * @param string $text * @param string $language * @param string|null $zahlungszielskonto * @param string|null $zahlungszieltageskonto * @param int|null $zahlungszieltage * * @return string */ public function getSkontoText( $doctype, $doctypeId, $text, $language = '', $zahlungszielskonto = null, $zahlungszieltageskonto = null, $zahlungszieltage = null ) { if($zahlungszielskonto === null || $zahlungszieltageskonto === null) { $doctypeRow = $this->app->DB->SelectRow( sprintf( "SELECT * FROM `%s` WHERE id = %d", $doctype, $doctypeId ) ); if(isset($doctypeRow['zahlungszieltage']) && isset($doctypeRow['zahlungszieltageskonto'])) { $zahlungszielskonto = $doctypeRow['zahlungszielskonto']; $zahlungszieltageskonto = $doctypeRow['zahlungszieltageskonto']; $zahlungszieltage = $doctypeRow['zahlungszieltage']; } else { $doctypeRow = $this->app->DB->SelectRow( sprintf( "SELECT zahlungszieltage, zahlungszieltageskonto FROM `adresse` WHERE id = %d", $doctypeRow['adresse'] ) ); $zahlungszielskonto = $doctypeRow['zahlungszielskonto']; $zahlungszieltageskonto = $doctypeRow['zahlungszieltageskonto']; $zahlungszieltage = $doctypeRow['zahlungszieltage']; } if($zahlungszielskonto == 0) { return $text; } } $zahlungszielskontototal=$zahlungszielskonto; if(empty($language)) { $doctypeRow = $this->app->DB->SelectRow( sprintf( "SELECT sprache, adresse, datum, DATE_FORMAT(datum, '%%d.%%m.%%Y') AS datum_de, DATE_FORMAT(DATE_ADD(datum, INTERVAL zahlungszieltage DAY),'%%d.%%m.%%Y') AS zahlungdatum, zahlungszieltage FROM `%s` WHERE id = %d", $doctype, $doctypeId ) ); $language = !empty($doctypeRow['sprache'])?(String)$doctypeRow['sprache']:(String)$this->app->DB->Select( sprintf( 'SELECT sprache FROM adresse WHERE id = %d', $doctypeRow['adresse'] ) ); } $zahlungszielskontodatum = $this->app->DB->Select( sprintf( "SELECT DATE_FORMAT(DATE_ADD(`datum`, INTERVAL %d DAY),'%%d.%%m.%%Y') FROM `%s` WHERE `id` = %d LIMIT 1", $zahlungszieltageskonto, $doctype, $doctypeId ) ); if($this->einstellungen['own_discount_text']) { if($doctype === 'rechnung') { $ownText = $this->app->erp->Beschriftung('own_discount_text_invoice', $language); if(empty($ownText)) { $ownText = $this->einstellungen['own_discount_text_invoice']; } $text .= "\n".$ownText; } else{ $ownText = $this->app->erp->Beschriftung('own_discount_text_order', $language); if(empty($ownText)) { $ownText = $this->einstellungen['own_discount_text_order']; } $text .= "\n".$ownText; } if($zahlungszieltageskonto<=0){ $zahlungdatum = $this->app->DB->Select( sprintf( "SELECT DATE_FORMAT(DATE_ADD(`datum`, INTERVAL %d DAY),'%%d.%%m.%%Y') FROM `%s` WHERE `id` = %d LIMIT 1", $zahlungszieltageskonto, $doctype, $doctypeId ) ); $zahlungszielskontodatum = $zahlungdatum; } } else { $text .= "\n".$this->app->erp->Beschriftung('dokument_skonto', $language) ." $zahlungszielskonto% " .$this->app->erp->Beschriftung('dokument_innerhalb', $language) ." $zahlungszieltageskonto " .$this->app->erp->Beschriftung('dokument_tagen', $language); } return str_replace( [ '{ZAHLUNGSZIELSKONTO}', '{ZAHLUNGSZIELTAGE}', '{ZAHLUNGSZIELTAGESKONTO}', '{ZAHLUNGSZIELSKONTOTOTAL}', '{ZAHLUNGSZIELSKONTODATUM}', ], [ number_format($zahlungszielskonto,2,',','.'), $zahlungszieltage, $zahlungszieltageskonto, number_format($zahlungszielskontototal,2,',','.'), $zahlungszielskontodatum, ], $text ); } /** * @return string */ public function GetBezeichnung() { return 'Rechnung'; } /** * @return array */ public function EinstellungenStruktur() { return [ 'invoice_immediately' => [ 'typ'=>'textarea', 'bezeichnung'=>'Satz in Rechnung: (sofort) (DE)', 'default' => $this->app->erp->Beschriftung('zahlung_rechnung_sofort_de'), 'lang' => 'zahlungsweisen_rechnung_invoice_immediately', ], 'invoice_next' => [ 'typ'=>'textarea', 'bezeichnung'=>'Satz in Rechnung: (>= 1 Tag) (DE)', 'default' => $this->app->erp->Beschriftung('zahlung_rechnung_de'), 'lang' => 'zahlungsweisen_rechnung_invoice_next', ], 'order_immediately' => [ 'typ'=>'textarea', 'bezeichnung'=>'Satz in Angebot/Auftrag: (sofort) (DE)', 'default' => $this->app->erp->Beschriftung('zahlung_auftrag_sofort_de'), 'lang' => 'zahlungsweisen_rechnung_order_immediately', ], 'order_next' => [ 'typ'=>'textarea', 'bezeichnung'=>'Satz in Angebot/Auftrag: (>= 1 Tag) (DE)', 'default' => $this->app->erp->Beschriftung('zahlung_auftrag_de'), 'lang' => 'zahlungsweisen_rechnung_order_next', ], 'own_discount_text' => [ 'typ' => 'checkbox', 'bezeichnung' => 'Eigener Skontotext', ], 'own_discount_text_order' => [ 'typ'=>'textarea', 'bezeichnung'=>'Satz in Angebot/Auftrag (DE)', 'default' => $this->app->erp->Beschriftung('eigener_skontotext_anab'), 'lang' => 'own_discount_text_order', ], 'own_discount_text_invoice' => [ 'typ' => 'textarea', 'bezeichnung'=>'Satz in Rechnung (DE)', 'default' => $this->app->erp->Beschriftung('eigener_skontotext_re'), 'lang' => 'own_discount_text_invoice', ], ]; } /** * @param string $doctype * @param int $doctypeid * * @return string */ public function GetZahlungsweiseText($doctype, $doctypeid) { $doctypeRow = $this->app->DB->SelectRow( sprintf( "SELECT sprache, adresse, datum, DATE_FORMAT(datum, '%%d.%%m.%%Y') AS datum_de, DATE_FORMAT(DATE_ADD(datum, INTERVAL zahlungszieltage DAY),'%%d.%%m.%%Y') AS zahlungdatum, zahlungszieltage FROM `%s` WHERE id = %d", $doctype, $doctypeid ) ); $zahlungszieltage = $doctypeRow['zahlungszieltage']; $zahlungdatum= $doctypeRow['zahlungdatum']; $language = !empty($doctypeRow['sprache'])?$doctypeRow['sprache']: $this->app->DB->Select( sprintf( 'SELECT sprache FROM adresse WHERE id = %d', $doctypeRow['adresse'] ) ); if($zahlungszieltage == 0) { $name = $doctype==='rechnung'?'invoice_immediately':'order_immediately'; } else { $name = $doctype==='rechnung'?'invoice_next':'order_next'; } $zahlungsweisetext = (String)$this->app->erp->Beschriftung('zahlungsweisen_rechnung_'.$name, $language); if(empty($zahlungsweisetext)) { $zahlungsweisetext = (String)$this->einstellungen[$name]; } if(empty($zahlungsweisetext)) { } if(empty($zahlungsweisetext)) { switch($name) { case 'invoice_immediately': $zahlungsweisetext = 'Rechnung zahlbar sofort. '; break; case 'invoice_next': $zahlungsweisetext = 'Rechnung zahlbar innerhalb von {ZAHLUNGSZIELTAGE} Tagen bis zum {ZAHLUNGBISDATUM}. '; break; } } $zahlungsweisetext = str_replace( ['{ZAHLUNGSZIELTAGE}','{ZAHLUNGBISDATUM}'], [$zahlungszieltage,$zahlungdatum], $zahlungsweisetext ); if(in_array($doctype, ['rechnung','auftrag','angebot'])) { $zahlungsweisetext = $this->getSkontoText($doctype, $doctypeid, $zahlungsweisetext); } return $zahlungsweisetext; } /** * @param $postData */ public function updatePostDataForAssistent($postData) { $postData['verhalten'] = 'rechnung'; return $postData; } }