");
$this->app->Location->execute("index.php?module=gutschrift&action=edit&id=$id&msg=$msg");
}
if($showDefault){
$name = $this->app->DB->Select("SELECT a.name FROM gutschrift b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
$summe = $this->app->DB->Select("SELECT soll FROM gutschrift WHERE id='$id' LIMIT 1");
$waehrung = $this->app->DB->Select("SELECT waehrung FROM gutschrift_position
WHERE gutschrift='$id' LIMIT 1");
$this->app->Tpl->Set('TAB1', "
Soll die Gutschrift an $name im Wert von $summe $waehrung
jetzt freigegeben werden?
");
}
$this->GutschriftMenu();
$this->app->Tpl->Parse('PAGE','tabview.tpl');
}
function GutschriftAbschicken()
{
$this->GutschriftMenu();
$this->app->erp->DokumentAbschicken();
}
function GutschriftDelete()
{
$id = $this->app->Secure->GetGET("id");
$belegnr = $this->app->DB->Select("SELECT belegnr FROM gutschrift WHERE id='$id' LIMIT 1");
$name = $this->app->DB->Select("SELECT name FROM gutschrift WHERE id='$id' LIMIT 1");
$status = $this->app->DB->Select("SELECT status FROM gutschrift WHERE id='$id' LIMIT 1");
if($belegnr=="0" || $belegnr=="")
{
$this->app->erp->DeleteGutschrift($id);
$belegnr="ENTWURF";
$msg = $this->app->erp->base64_url_encode("
Die Gutschrift \"$name\" ($belegnr) wurde gelöscht!
");
//header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
header("Location: index.php?module=gutschrift&action=list&msg=$msg");
exit;
} else
{
if(0)//$status=="versendet")
{
// KUNDE muss RMA starten
$msg = $this->app->erp->base64_url_encode("
Gutschrift \"$name\" ($belegnr) kann nicht storniert werden sie bereits versendet ist.
");
}
else
{
$maxbelegnr = $this->app->DB->Select("SELECT MAX(belegnr) FROM gutschrift");
if(0)//$maxbelegnr == $belegnr)
{
$this->app->DB->Delete("DELETE FROM gutschrift_position WHERE gutschrift='$id'");
$this->app->DB->Delete("DELETE FROM gutschrift_protokoll WHERE gutschrift='$id'");
$this->app->DB->Delete("DELETE FROM gutschrift WHERE id='$id'");
$msg = $this->app->erp->base64_url_encode("
Diese Gutschrift ist schreibgeschützt und darf daher nicht mehr bearbeitet werden!
");
// $this->app->erp->CommonReadonly();
}
if($schreibschutz=="1") {
$this->app->erp->CommonReadonly();
}
if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('gutschrift','edit'))
{
$this->app->erp->RemoveReadonly('zahlungsstatus');
if ($aktion = $this->app->Secure->GetPOST('speichern') == 'Speichern') {
$zahlungsstatus = $this->app->Secure->GetPOST('zahlungsstatus');
$this->app->DB->Update("UPDATE gutschrift SET zahlungsstatus='".$zahlungsstatus."' WHERE id='$id' LIMIT 1");
}
}
$rechnungid = $this->app->DB->Select("SELECT rechnungid FROM gutschrift WHERE id='$id' LIMIT 1");
$rechnungid = $this->app->DB->Select("SELECT id FROM rechnung WHERE id='$rechnungid' AND belegnr!='' LIMIT 1");
if($status=="")
$this->app->DB->Update("UPDATE gutschrift SET status='angelegt' WHERE id='$id' LIMIT 1");
if($schreibschutz != '1'){
if($this->app->erp->Firmendaten("schnellanlegen") == "1"){
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
');
}else{
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
');
}
}
// immer wenn sich der lieferant genändert hat standartwerte setzen
if($this->app->Secure->GetPOST("adresse")!="")
{
$tmp = $this->app->Secure->GetPOST("adresse");
$kundennummer = $this->app->erp->FirstTillSpace($tmp);
$filter_projekt = $this->app->DB->Select("SELECT projekt FROM gutschrift WHERE id = '$id' LIMIT 1");
//if($filter_projekt)$filter_projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id= '$filter_projekt' and eigenernummernkreis = 1 LIMIT 1");
$name = substr($tmp,6);
$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND geloescht=0 ".$this->app->erp->ProjektRechte("projekt", true, 'vertrieb')." ORDER by ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1");
$uebernehmen =$this->app->Secure->GetPOST("uebernehmen");
if($uebernehmen=="1" && $schreibschutz != '1') // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
{
$this->app->erp->LoadGutschriftStandardwerte($id,$adresse);
$this->app->erp->GutschriftNeuberechnen($id);
header("Location: index.php?module=gutschrift&action=edit&id=$id");
exit;
}
}
// optional rechnungen als bezahlt markieren wenn es jetzt gutschriften gibt
$land = $this->app->DB->Select("SELECT land FROM gutschrift WHERE id='$id' LIMIT 1");
$ustid = $this->app->DB->Select("SELECT ustid FROM gutschrift WHERE id='$id' LIMIT 1");
$ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM gutschrift WHERE id='$id' LIMIT 1");
if($ust_befreit) {
$this->app->Tpl->Set('USTBEFREIT',"
");
}
// easy table mit arbeitspaketen YUI als template
$table = new EasyTable($this->app);
$table->Query("SELECT bezeichnung as artikel, nummer as Nummer, menge, vpe as VPE, FORMAT(preis,4) as preis FROM gutschrift_position WHERE gutschrift='$id'",0,'');
$table->DisplayNew('POSITIONEN','Preis','noAction');
/*
$table->Query("SELECT nummer as Nummer, menge,vpe as VPE, FORMAT(preis,4) as preis, FORMAT(menge*preis,4) as gesamt
FROM gutschrift_position
WHERE gutschrift='$id'");
$table->DisplayNew(POSITIONEN,"Preis","noAction");
*/
$summe = $this->app->DB->Select("SELECT FORMAT(SUM(menge*preis),2) FROM gutschrift_position
WHERE gutschrift='$id'");
$waehrung = $this->app->DB->Select("SELECT waehrung FROM gutschrift_position
WHERE gutschrift='$id' LIMIT 1");
if($summe > 0)
$this->app->Tpl->Add('POSITIONEN', "
Gesamtsumme: $summe $waehrung
");
$status= $this->app->DB->Select("SELECT status FROM gutschrift WHERE id='$id' LIMIT 1");
// $this->app->Tpl->Set(STATUS,"");
$this->app->Tpl->Set('STATUS',"");
$internet = $this->app->DB->Select("SELECT a.internet FROM gutschrift g LEFT JOIN rechnung r ON r.id=g.rechnungid LEFT JOIN auftrag a ON a.id=r.auftragid WHERE g.id='$id' AND g.id > 0 LIMIT 1");
if($internet!="")
{
$this->app->Tpl->Set('INTERNET',"
Internet:
");
}
$this->app->Tpl->Set('AKTIV_TAB1','selected');
$sollExtSoll = $this->app->DB->SelectRow(
sprintf(
"SELECT extsoll, soll
FROM gutschrift
WHERE id = %d AND schreibschutz = 0 AND status = 'versendet' AND extsoll <> 0",
$id
)
);
if(!empty($sollExtSoll['extsoll']) && $sollExtSoll['extsoll'] == $sollExtSoll['soll']) {
$sollExtSoll['soll'] = $this->app->DB->Select(
sprintf(
'SELECT ROUND(SUM(`umsatz_brutto_gesamt`),2) FROM `gutschrift_position` WHERE `gutschrift` = %d ',
$id
)
);
}
if(!empty($sollExtSoll) && $sollExtSoll['soll'] != $sollExtSoll['extsoll']) {
$extsoll = $sollExtSoll['extsoll'];
$this->app->Tpl->Add(
'MESSAGE',''
);
}
parent::GutschriftEdit();
if($id > 0 && $this->app->DB->Select(
sprintf(
'SELECT id FROM gutschrift WHERE schreibschutz =1 AND zuarchivieren = 1 AND id = %d',
$id
)
)
) {
$this->app->erp->PDFArchivieren('gutschrift', $id, true);
}
$this->app->erp->MessageHandlerStandardForm();
if($this->app->Secure->GetPOST('weiter')!='') {
$this->app->Location->execute('index.php?module=gutschrift&action=positionen&id='.$id);
}
$this->GutschriftMenu();
}
public function GutschriftCreate()
{
$this->app->erp->MenuEintrag('index.php?module=gutschrift&action=list','Zurück zur Übersicht');
$anlegen = $this->app->Secure->GetGET('anlegen');
if($anlegen!='1' && $this->app->erp->Firmendaten('schnellanlegen')=='1') {
$this->app->Location->execute('index.php?module=gutschrift&action=create&anlegen=1');
}
if($anlegen != '') {
$id = $this->app->erp->CreateGutschrift();
$this->app->Location->execute('index.php?module=gutschrift&action=edit&id='.$id);
}
$this->app->Tpl->Set('MESSAGE',"
Möchten Sie eine Gutschrift jetzt anlegen?
");
$this->app->Tpl->Set('TAB1',"
Gutschriften in Bearbeitung
Offene Aufträge, die durch andere Mitarbeiter in Bearbeitung sind.
[AUFTRAGE]");
$this->app->Tpl->Set('AKTIV_TAB1',"selected");
$table = new EasyTable($this->app);
$table->Query("SELECT DATE_FORMAT(datum,'%d.%m.%y') as vom, if(belegnr!='',belegnr,'ohne Nummer') as beleg, name, status, id
FROM gutschrift WHERE status='angelegt' order by datum DESC, id DESC");
$table->DisplayNew('AUFTRAGE', "
");
$this->app->Tpl->Set('TABTEXT','Gutschrift anlegen');
$this->app->Tpl->Parse('PAGE','tabview.tpl');
}
public function GutschriftList()
{
$this->app->Tpl->Set('UEBERSCHRIFT', 'Gutschriften');
$this->app->DB->Update("UPDATE gutschrift SET zahlungsstatus='offen' WHERE zahlungsstatus=''");
// First refresh all open items
$openids = $this->app->DB->SelectArr("SELECT id, waehrung from gutschrift WHERE zahlungsstatus != 'bezahlt'");
foreach ($openids as $openid) {
$saldo = $this->app->erp->GetSaldoDokument($openid['id'],'gutschrift');
if (!empty($saldo)) {
if ($saldo['waehrung'] == $openid['waehrung']) {
$sql = "UPDATE gutschrift SET ist = '".$saldo['betrag']."'+soll WHERE id=".$openid['id'];
$result = $this->app->DB->Update($sql);
}
}
else {
$this->app->DB->Update("UPDATE gutschrift SET ist = null WHERE id=".$openid['id']);
}
}
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('gutschrift', '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)) {
$ids = [];
foreach($auswahl as $id) {
$id = (int)$id;
if($id > 0) {
$ids[] = $id;
}
}
$ids = array_unique($ids);
switch($aktion) {
case 'erledigtam':
if(!empty($ids)){
$this->app->DB->Update(
sprintf(
"UPDATE `gutschrift`
SET `manuell_vorabbezahlt`=CURDATE(),
`manuell_vorabbezahlt_hinweis`=CONCAT(`manuell_vorabbezahlt_hinweis`,'\r\n','Erledigt am manuell auf %s gesetzt')
WHERE `id` IN (%s)",
date('d.m.Y'), implode(',', $ids)
)
);
}
break;
case 'offen':
if(!empty($ids)) {
$this->app->DB->Update(
sprintf(
"UPDATE `gutschrift`
SET `manuell_vorabbezahlt` = NULL,
`manuell_vorabbezahlt_hinweis`=CONCAT(`manuell_vorabbezahlt_hinweis`,'\r\n','Erledigt am manuell zurückgesetzt am %s')
WHERE `id` IN (%s)",
date('d.m.Y'), implode(',', $ids)
)
);
}
break;
case 'mail':
$returnOrders = empty($ids)?[]:$this->app->DB->SelectArr(
sprintf(
"SELECT * FROM `gutschrift` WHERE `id` IN (%s)",
implode(',', $ids)
)
);
if(empty($returnOrders)) {
$returnOrders = [];
}
foreach($returnOrders as $returnOrder) {
$v = $returnOrder['id'];
$email = (string)$returnOrder['email'];
$adresse = $returnOrder['adresse'];
$projekt = $returnOrder['projekt'];
$name = $returnOrder['name'];
$sprache = $returnOrder['sprache'];
if($sprache=='' && $adresse > 0){
$sprache = $this->app->DB->Select(
sprintf(
'SELECT `sprache` FROM `adresse` WHERE `id`= %d AND `geloescht` = 0 LIMIT 1',
$adresse
)
);
}
if($sprache=='') {
$sprache='de';
}
$emailtext = $this->app->erp->Geschaeftsbriefvorlage($sprache,'gutschrift',$projekt,$name,$v);
if($email === '' && $adresse > 0) {
$email = (string)$this->app->DB->Select(
sprintf(
"SELECT `email` FROM `adresse` WHERE `id` = %d LIMIT 1",
$adresse
)
);
}
if($email !== '') {
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('GutschriftPDFCustom')) {
$Brief = new GutschriftPDFCustom($this->app,$projekt);
}
else{
$Brief = new GutschriftPDF($this->app,$projekt);
}
$Brief->GetGutschrift($v);
$_tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
unlink($_tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('GutschriftPDFCustom')) {
$Brief = new GutschriftPDFCustom($this->app,$projekt);
}
else{
$Brief = new GutschriftPDF($this->app,$projekt);
}
$Brief->GetGutschrift($v);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$fileid = $this->app->erp->CreateDatei(
$Brief->filename,'gutschrift','','',$tmpfile,$this->app->User->GetName()
);
$this->app->erp->AddDateiStichwort($fileid,'gutschrift','gutschrift',$v);
$this->app->erp->DokumentSend(
$adresse,'gutschrift', $v, 'email',$emailtext['betreff'],$emailtext['text'],
[$tmpfile],'','',$projekt,$email, $name
);
$ansprechpartner = $name.' <'.$email.'>';
$this->app->DB->Insert("INSERT INTO dokumente_send
(id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid)
VALUES ('','gutschrift',NOW(),'".$this->app->DB->real_escape_string($this->app->User->GetName())."',
'$adresse','$v','email','$betreff','$text','$projekt','$ansprechpartner',1,'$fileid')");
$tmpid = $this->app->DB->GetInsertID();
unlink($tmpfile);
$this->app->DB->Update("UPDATE gutschrift SET versendet=1, versendet_am=NOW(),
versendet_per='email',versendet_durch='".$this->app->DB->real_escape_string($this->app->User->GetName())."',schreibschutz='1' WHERE id='$v' LIMIT 1");
$this->app->erp->GutschriftProtokoll($v,'Gutschrift versendet');
}
}
break;
case 'versendet':
$returnOrders = empty($ids)?[]: $this->app->DB->SelectPairs(
sprintf(
'SELECT `id`, `projekt` FROM `gutschrift` WHERE `id` IN (%s)',
implode(',', $ids)
)
);
foreach($returnOrders as $returnOrderId => $projectId) {
if(class_exists('GutschriftPDFCustom')) {
$Brief = new GutschriftPDFCustom($this->app,$projectId);
}
else{
$Brief = new GutschriftPDF($this->app,$projectId);
}
$Brief->GetGutschrift($returnOrderId);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$this->app->erp->GutschriftProtokoll($returnOrderId, 'Gutschrift versendet');
$this->app->DB->Update(
sprintf(
"UPDATE `gutschrift`
SET `schreibschutz`=1, `versendet` = 1, `status`='versendet'
WHERE `id` = %d
LIMIT 1",
$returnOrderId
)
);
@unlink($tmpfile);
}
break;
case 'drucken':
if($drucker && !empty($ids)) {
$returnOrders = $this->app->DB->SelectPairs(
sprintf(
'SELECT `id`, `projekt` FROM `gutschrift` WHERE `id` IN (%s)',
implode(',', $ids)
)
);
foreach($returnOrders as $returnOrderId => $projekt) {
if(class_exists('GutschriftPDFCustom')) {
$Brief = new GutschriftPDFCustom($this->app,$projekt);
}
else{
$Brief = new GutschriftPDF($this->app,$projekt);
}
$Brief->GetGutschrift($returnOrderId);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$this->app->printer->Drucken($drucker,$tmpfile);
$doctype = 'gutschrift';
$adressId = $this->app->DB->Select("SELECT adresse FROM gutschrift WHERE id = '$returnOrderId' LIMIT 1");
$this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $returnOrderId, $projekt, $adressId, $aktion);
$this->app->erp->GutschriftProtokoll($returnOrderId,'Gutschrift versendet');
$this->app->DB->Update(
sprintf(
"UPDATE `gutschrift`
SET `schreibschutz` = 1, `versendet` = 1, `status`='versendet'
WHERE `id` = %d
LIMIT 1",
$returnOrderId
)
);
}
}
break;
case 'pdf':
$tmpfile = [];
$returnOrders = empty($ids)?[]: $this->app->DB->SelectPairs(
sprintf(
'SELECT `id`, `projekt` FROM `gutschrift` WHERE `id` IN (%s)',
implode(',', $ids)
)
);
foreach($returnOrders as $returnOrderId => $projectId) {
if(class_exists('GutschriftPDFCustom')) {
$Brief = new GutschriftPDFCustom($this->app,$projectId);
}
else{
$Brief = new GutschriftPDF($this->app,$projectId);
}
$Brief->GetGutschrift($returnOrderId);
$tmpfile[] = $Brief->displayTMP();
}
if((!empty($tmpfile)?count($tmpfile):0) > 0) {
try {
/** @var PdfMerger $pdfMerger */
$pdfMerger = $this->app->Container->get('PdfMerger');
$mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf';
$pdfMerger->merge($tmpfile, $mergeOutputPath);
foreach($tmpfile as $key=>$value) {
unlink($value);
}
header('Content-type:application/pdf');
header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf');
readfile($mergeOutputPath);
$this->app->ExitXentral();
} catch (PdfComponentExceptionInterface $exception) {
echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage());
$this->app->ExitXentral();
}
}
break;
}
}
}
$backurl = $this->app->Secure->GetGET('backurl');
$backurl = $this->app->erp->base64_url_decode($backurl);
$this->app->erp->MenuEintrag('index.php?module=gutschrift&action=list','Übersicht');
$this->app->erp->MenuEintrag('index.php?module=gutschrift&action=create','Neue Gutschrift anlegen');
if(strlen($backurl)>5){
$this->app->erp->MenuEintrag((string)$backurl, 'Zurück zur Übersicht');
}
else{
$this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht');
}
$zahlungsweisen = $this->app->DB->SelectArr('
SELECT `zahlungsweise`
FROM `gutschrift`
GROUP BY `zahlungsweise`
');
$zahlungsweiseStr = '';
if ($zahlungsweisen) {
foreach ($zahlungsweisen as $zahlungsweise) {
if (empty($zahlungsweise['zahlungsweise'])) {
continue;
}
$zahlungsweiseStr .= '';
}
}
$status = $this->app->DB->SelectArr('
SELECT status
FROM gutschrift
GROUP BY status
');
$statusStr = '';
if ($status) {
foreach ($status as $statusE) {
if (empty($statusE['status'])) {
continue;
}
$statusStr .= '';
}
}
$versandarten = $this->app->DB->SelectArr('
SELECT versandart
FROM gutschrift
GROUP BY versandart
');
$versandartenStr = '';
if ($versandarten) {
foreach ($versandarten as $versandart) {
if (empty($versandart['versandart'])) {
continue;
}
$versandartenStr .= '';
}
}
$laender = $this->app->erp->GetSelectLaenderliste();
$laenderStr = '';
foreach ($laender as $landKey => $land) {
$laenderStr .= '';
}
$this->app->YUI->DatePicker('datumVon');
$this->app->YUI->DatePicker('datumBis');
$this->app->YUI->AutoComplete('projekt', 'projektname', 1);
$this->app->YUI->AutoComplete('kundennummer', 'kunde', 1);
$this->app->YUI->AutoComplete('gutschriftnummer', 'gutschrift', 1);
$this->app->YUI->AutoComplete('artikel', 'artikelnummer', 1);
$this->app->Tpl->Add('ZAHLUNGSWEISEN',$zahlungsweiseStr);
$this->app->Tpl->Add('STATUS',$statusStr);
$this->app->Tpl->Add('VERSANDARTEN',$versandartenStr);
$this->app->Tpl->Add('LAENDER',$laenderStr);
$this->app->Tpl->Parse('TAB1','gutschrift_table_filter.tpl');
$this->app->Tpl->Set('AKTIV_TAB1','selected');
$this->app->Tpl->Set('INHALT','');
$this->app->YUI->TableSearch('TAB2','gutschriftenoffene');
$this->app->YUI->TableSearch('TAB1','gutschriften');
$this->app->YUI->TableSearch('TAB3','gutschrifteninbearbeitung');
$this->app->Tpl->Set(
'SELDRUCKER',
$this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker'))
);
$this->app->Tpl->Parse('PAGE','gutschriftuebersicht.tpl');
}
/**
* @param int $id
*
* @return int|string|null
*/
public function CopyGutschrift($id)
{
$this->app->DB->Insert('INSERT INTO gutschrift (id) VALUES (NULL)');
$newid = $this->app->DB->GetInsertID();
$arr = $this->app->DB->SelectRow("SELECT NOW() as datum,projekt,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer, bearbeiter,zahlungszieltage,zahlungszieltageskonto,zahlungsweise,ohne_artikeltext,ohne_briefpapier,'angelegt' as status,typ,
zahlungszielskonto,ust_befreit,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,sprache,anzeigesteuer,waehrung,kurs,kostenstelle,
firma FROM gutschrift WHERE id='$id' LIMIT 1");
$this->app->DB->LogIfError();
$arr['kundennummer'] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '".$arr['adresse']."' LIMIT 1");
$arr['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM gutschrift WHERE id='$id' LIMIT 1");
$this->app->DB->UpdateArr('gutschrift',$newid,'id',$arr, true);
$pos = $this->app->DB->SelectArr("SELECT * FROM gutschrift_position WHERE gutschrift='$id'");
$cpos = !empty($pos)?count($pos):0;
for($i=0;$i<$cpos;$i++){
$this->app->DB->Insert("INSERT INTO gutschrift_position (gutschrift) VALUES ($newid)");
$newposid = $this->app->DB->GetInsertID();
$pos[$i]['gutschrift']=$newid;
$this->app->DB->UpdateArr('gutschrift_position',$newposid,'id',$pos[$i], true);
if(is_null($pos[$i]['steuersatz'])){
$this->app->DB->Update("UPDATE gutschrift_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1");
}
}
$this->app->erp->CheckFreifelder('gutschrift',$newid);
$this->app->erp->CopyBelegZwischenpositionen('gutschrift',$id,'gutschrift',$newid);
$this->app->erp->LoadSteuersaetzeWaehrung($newid,'gutschrift');
return $newid;
}
/**
* @param int $id
* @param int $adresse
*/
public function LoadGutschriftStandardwerte($id,$adresse)
{
if($id==0 || $id=='' || $adresse=='' || $adresse=='0') {
return;
}
// standard adresse von lieferant
$arr = $this->app->DB->SelectRow(
sprintf(
"SELECT adr.*,adr.vertrieb as vertriebid, '' as bearbeiter, adr.innendienst as bearbeiterid
FROM `adresse` AS `adr`
WHERE adr.id= %d AND adr.geloescht=0
LIMIT 1",
$adresse
)
);
if($arr['bearbeiterid'] <=0 ){
$arr['bearbeiterid'] = $this->app->User->GetAdresse();
}
$arr['gruppe'] = $this->app->erp->GetVerband($adresse);
$rolle_projekt = $this->app->DB->Select(
sprintf(
"SELECT ar.parameter
FROM `adresse_rolle` AS `ar`
WHERE ar.adresse= %d
AND ar.subjekt='Kunde' AND ar.objekt='Projekt'
AND (IFNULL(ar.bis,'0000-00-00') ='0000-00-00' OR ar.bis <= CURDATE())
LIMIT 1",
$adresse
)
);
if($rolle_projekt > 0) {
$arr['projekt'] = $rolle_projekt;
}
$field = [
'gln','anschreiben','name','abteilung','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid',
'email','telefon','telefax','kundennummer','projekt','ust_befreit','gruppe','typ','vertriebid','bearbeiter',
'ansprechpartner','bearbeiterid','titel','lieferbedingung'
];
foreach($field as $key=>$value) {
if($value ==='projekt' && $this->app->Secure->POST[$value]!='' && 0) {
$uparr[$value] = str_replace("'", ''',$this->app->Secure->POST[$value]);
}
else {
$this->app->Secure->POST[$value] = str_replace("'", ''',$arr[$value]);
$uparr[$value] = str_replace("'", ''',$arr[$value]);
}
}
$uparr['adresse'] = $adresse;
$uparr['ust_befreit'] = $this->app->erp->AdresseUSTCheck($adresse);
$uparr['zahlungsstatusstatus']='offen';
$this->app->DB->UpdateArr('gutschrift',$id,'id',$uparr,true);
$uparr=null;
//liefernantenvorlage
$arr = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1");
$field = array('zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','versandart');
// falls von Benutzer projekt ueberladen werden soll
$projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1");
if($projekt_bevorzugt=='1') {
$uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1");
$arr['projekt'] = $uparr['projekt'];
$this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr['projekt']."' AND id > 0 LIMIT 1");
}
$this->app->erp->LoadZahlungsweise($adresse,$arr);
$this->app->Secure->POST['zahlungsweise'] = strtolower($arr['zahlungsweise']);
$this->app->Secure->POST['zahlungszieltage'] = strtolower($arr['zahlungszieltage']);
$this->app->Secure->POST['zahlungszieltageskonto'] = strtolower($arr['zahlungszieltageskonto']);
$this->app->Secure->POST['zahlungszielskonto'] = strtolower($arr['zahlungszielskonto']);
$this->app->Secure->POST['versandart'] = strtolower($arr['versandart']);
if(isset($arr['usereditid'])){
unset($arr['usereditid']);
}
// Enter the correct billing address into the credit note data before it gets saved.
$arr = $this->app->Container->get('CreditNoteAddressService')->applyBillingAddressToCreditNoteArray($id, $arr);
$this->app->DB->UpdateArr('gutschrift',$id,'id',$arr,true);
$this->app->erp->LoadSteuersaetzeWaehrung($id,'gutschrift');
$this->app->erp->LoadAdresseStandard('gutschrift',$id,$adresse);
}
/**
* @param int $id
*
* @return int|mixed
*/
public function GutschriftSaldo($id)
{
if($id <= 0) {
return 0;
}
$rechnungid = $this->app->DB->Select(
sprintf(
'SELECT `rechnungid` FROM `gutschrift` WHERE `id`= %d LIMIT 1',
$id
)
);
$auftragid = $rechnungid <= 0?0:$this->app->DB->Select(
sprintf(
'SELECT `auftragid` FROM `rechnung` WHERE `id`=%d LIMIT 1',
$rechnungid
)
);
$eingangArr = $this->app->DB->SelectArr(
sprintf(
"SELECT ko.bezeichnung as konto, DATE_FORMAT(ke.datum,'%%d.%%m.%%Y') as datum, k.id as kontoauszuege, ke.betrag as betrag
FROM `kontoauszuege_zahlungseingang` AS `ke`
LEFT JOIN `kontoauszuege` AS `k` ON ke.kontoauszuege=k.id
LEFT JOIN `konten` AS `ko` ON k.konto=ko.id
WHERE (ke.objekt='gutschrift' AND ke.parameter=%d)
OR (ke.objekt='auftrag' AND ke.parameter=%d AND ke.parameter>0)
OR (ke.objekt='rechnung' AND ke.parameter=%d AND ke.parameter>0)",
$id, $auftragid, $rechnungid
)
);
$einnahmen = 0;
if(!empty($eingangArr)) {
foreach($eingangArr AS $eingangRow) {
$einnahmen += $eingangRow['betrag'];
}
}
//$gutschriften = $this->app->DB->SelectArr("SELECT belegnr, DATE_FORMAT(datum,'%d.%m.%Y') as datum,soll FROM gutschrift WHERE rechnungid='$id' "); // alt
$gutschriften = $this->app->DB->SelectArr(
sprintf(
"SELECT ro.belegnr, DATE_FORMAT(ro.datum,'%%d.%%m.%%Y') as datum, ro.soll
FROM `gutschrift` AS `ro`
WHERE ro.`id` = %d ",
$id
)
);
if(!empty($gutschriften)) {
foreach($gutschriften as $gutschriftRow) {
$einnahmen += $gutschriftRow['soll'];
}
}
$ausgangArr = $this->app->DB->SelectArr(
sprintf(
"SELECT ko.bezeichnung as konto, DATE_FORMAT(ke.datum,'%%d.%%m') as datum, ke.betrag as betrag
FROM kontoauszuege_zahlungsausgang ke
LEFT JOIN kontoauszuege k ON ke.kontoauszuege=k.id
LEFT JOIN konten ko ON k.konto=ko.id
WHERE (ke.objekt='gutschrift' AND ke.parameter=%d)
OR (ke.objekt='rechnung' AND ke.parameter=%d AND ke.parameter>0)
OR (ke.objekt='auftrag' AND ke.parameter=%d AND ke.parameter>0)",
$id, $rechnungid, $auftragid
)
);
$ausgaben = 0;
if(!empty($ausgangArr)){
foreach($ausgangArr as $ausgangRow) {
$ausgaben += $ausgangRow['betrg'];
}
}
return $einnahmen - $ausgaben;
}
}