Cześć, wt., 7 sty 2020 o 10:55 Internet <internety@jpk.pl> napisał(a):
nie ma czegoś takiego jak zbiorcza faktura korygująca. Każda faktura musi mieć "swoją" korektę.
W sensie jeśli chcesz wystawić wiele korekt, bo np wystawiali 'ZW' a potrzeba 'NP' (komuś się zamarzyło odzyskiwać VAT, sprzedaż ubezpieczeń) to można to sobie takim np php ogarnąć: tylko to taxid sztywno i data 2013 rok zrobiłem - oczywiście powstało N (duże N, ponad 20) korekt, może komuś się przyda: <?php /* * LMS version 1.11.10 Kri * $Id: invoicenote.php,v 1.42 2010/03/11 13:07:46 alec Exp $ */ $taxeslist = $LMS->GetTaxes(); $numberplanlist = $LMS->GetNumberPlans(DOC_CNOTE); $action = isset($_GET['action']) ? $_GET['action'] : NULL; $table_id = $DB->GetAll('select id from documents where id in (select docid from invoicecontents where tariffid in (select id from tariffs where taxid=4 and id<>93))and cdate <= unix_timestamp (\'2013-12-31 24:00:00.0\') and cdate >= unix_timestamp (\'2013-01-01 00:00:00.1\');'); print(count($table_id)); print("<BR>\n"); flush(); foreach($table_id as $idx => $my_item) { $invoice = $LMS->GetInvoiceContent($my_item['id']); print(".<BR>\n"); flush(); unset($cnote); unset($invoiceid); unset($invoicecontents); unset($nitem); foreach ($invoice['content'] as $item) { $nitem['tariffid'] = $item['tariffid']; $nitem['name'] = $item['description']; $nitem['prodid'] = $item['prodid']; $nitem['count'] = str_replace(',','.',$item['count']); $nitem['discount'] = str_replace(',','.',$item['discount']); $nitem['jm'] = str_replace(',','.',$item['content']); $nitem['valuenetto'] = str_replace(',','.',$item['basevalue']); $nitem['valuebrutto'] = str_replace(',','.',$item['value']); $nitem['s_valuenetto'] = str_replace(',','.',$item['totalbase']); $nitem['s_valuebrutto'] = str_replace(',','.',$item['total']); $nitem['tax'] = isset($taxeslist[$item['taxid']]) ? $taxeslist[$item['taxid']]['label'] : 0; $nitem['taxid'] = $item['taxid']; $nitem['itemid'] = $item['itemid']; $invoicecontents[$nitem['itemid']] = $nitem; } $cnote['reason'] = ''; $cnote['paytype'] = $invoice['paytype']; $cnote['cdate'] = 1388505369; $cnote['numberplanid'] = 14; $t = $invoice['cdate'] + $invoice['paytime']*86400; $deadline = mktime(23, 59, 59, date('m',$t), date('d',$t), date('Y',$t)); if($cnote['cdate'] > $deadline) $cnote['paytime'] = 0; else $cnote['paytime'] = floor(($deadline - $cnote['cdate'])/86400); $cnote['use_current_division'] = true; $SESSION->save('cnote', $cnote); $SESSION->save('invoice', $invoice); $SESSION->save('invoiceid', $invoice['id']); $SESSION->save('invoicecontents', $invoicecontents); $SESSION->restore('invoicecontents', $contents); $SESSION->restore('invoice', $invoice); $SESSION->restore('cnote', $cnote); $SESSION->restore('cnoteerror', $error); $ntempl = docnumber($invoice['number'], $invoice['template'], $invoice['cdate']); $layout['pagetitle'] = trans('Credit Note for Invoice: $0', $ntempl); if($cnote['paytime'] < 0) $cnote['paytime'] = 14; if(!isset($cnote['paytype']) || $cnote['paytype'] == '') $cnote['paytype'] = trans('TRANSFER'); if($contents && $cnote) { $DB->BeginTrans(); $SESSION->restore('invoiceid', $invoice['id']); $newcontents = r_trim($_POST); foreach($contents as $item) { $idx = $item['itemid']; $contents[$idx]['taxid'] = isset($newcontents['taxid'][$idx]) ? $newcontents['taxid'][$idx] : $item['taxid']; $contents[$idx]['prodid'] = isset($newcontents['prodid'][$idx]) ? $newcontents['prodid'][$idx] : $item['prodid']; $contents[$idx]['jm'] = isset($newcontents['jm'][$idx]) ? $newcontents['jm'][$idx] : $item['jm']; $contents[$idx]['count'] = isset($newcontents['count'][$idx]) ? $newcontents['count'][$idx] : $item['count']; $contents[$idx]['discount'] = isset($newcontents['discount'][$idx]) ? $newcontents['discount'][$idx] : $item['discount']; $contents[$idx]['name'] = isset($newcontents['name'][$idx]) ? $newcontents['name'][$idx] : $item['name']; $contents[$idx]['tariffid'] = isset($newcontents['tariffid'][$idx]) ? $newcontents['tariffid'][$idx] : $item['tariffid']; $contents[$idx]['valuebrutto'] = $newcontents['valuebrutto'][$idx]!='' ? $newcontents['valuebrutto'][$idx] : $item['valuebrutto']; $contents[$idx]['valuenetto'] = $newcontents['valuenetto'][$idx]!='' ? $newcontents['valuenetto'][$idx] : $item['valuenetto']; $contents[$idx]['valuebrutto'] = f_round($contents[$idx]['valuebrutto']); $contents[$idx]['valuenetto'] = f_round($contents[$idx]['valuenetto']); $contents[$idx]['count'] = f_round($contents[$idx]['count']); $contents[$idx]['discount'] = f_round($contents[$idx]['discount']); $taxvalue = $taxeslist[$contents[$idx]['taxid']]['value']; if($contents[$idx]['valuenetto'] != $item['valuenetto']) { $contents[$idx]['valuebrutto'] = round($contents[$idx]['valuenetto'] * ($taxvalue / 100 + 1),2); } if(isset($item['deleted']) && $item['deleted']) { $contents[$idx]['valuebrutto'] = 0; $contents[$idx]['cash'] = round($item['valuebrutto'] * $item['count'],2); $contents[$idx]['count'] = 0; } elseif($contents[$idx]['count'] != $item['count'] || $contents[$idx]['valuebrutto'] != $item['valuebrutto']) { $contents[$idx]['cash'] = round($item['valuebrutto'] * $item['count'],2) - round($contents[$idx]['valuebrutto'] * $contents[$idx]['count'],2); } $contents[$idx]['valuebrutto'] = $contents[$idx]['valuebrutto'] - $item['valuebrutto']; $contents[$idx]['count'] = $contents[$idx]['count'] - $item['count']; } $cnote['cdate'] = 1388505369; $cnote['numberplanid'] = 14; $DB->LockTables(array('documents', 'numberplans')); if(!isset($cnote['number']) || !$cnote['number']) $cnote['number'] = $LMS->GetNewDocumentNumber(DOC_CNOTE, $cnote['numberplanid'], $cnote['cdate']); else { if(!preg_match('/^[0-9]+$/', $cnote['number'])) $error['number'] = trans('Credit note number must be integer!'); elseif($LMS->DocumentExists($cnote['number'], DOC_CNOTE, $cnote['numberplanid'], $cnote['cdate'])) $error['number'] = trans('Credit note number $0 already exists!', $cnote['number']); if($error) $cnote['number'] = $LMS->GetNewDocumentNumber(DOC_CNOTE, $cnote['numberplanid'], $cnote['cdate']); } $DB->Execute('INSERT INTO documents (number, numberplanid, type, cdate, paytime, paytype, userid, customerid, name, address, ten, ssn, zip, city, countryid, reference, reason, divisionid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', array($cnote['number'], $cnote['numberplanid'] ? $cnote['numberplanid'] : 0, DOC_CNOTE, $cnote['cdate'], $cnote['paytime'], $cnote['paytype'], $AUTH->id, $invoice['customerid'], $invoice['name'], $invoice['address'], $invoice['ten'], $invoice['ssn'], $invoice['zip'], $invoice['city'], $invoice['countryid'], $invoice['id'], $cnote['reason'], !empty($cnote['use_current_division']) ? $invoice['current_divisionid'] : $invoice['divisionid'], )); $id = $DB->GetOne('SELECT id FROM documents WHERE number = ? AND cdate = ? AND type = ?', array($cnote['number'],$cnote['cdate'],DOC_CNOTE)); $DB->UnLockTables(); foreach($contents as $idx => $item) { $item['valuebrutto'] = str_replace(',','.', $item['valuebrutto']); $item['count'] = str_replace(',','.', $item['count']); $item['discount'] = str_replace(',','.', $item['discount']); if ($item['taxid']==4) $item['taxid']=6; $DB->Execute('INSERT INTO invoicecontents (docid, itemid, value, taxid, prodid, content, count, discount, description, tariffid) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', array($id, $idx, $item['valuebrutto'], $item['taxid'], $item['prodid'], $item['jm'], $item['count'], $item['discount'], $item['name'], $item['tariffid'] )); if(isset($item['cash']) && $item['cash'] != 0) $DB->Execute('INSERT INTO cash (time, userid, value, taxid, customerid, comment, docid, itemid) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', array($cnote['cdate'], $AUTH->id, str_replace(',','.',$item['cash']), $item['taxid'], $invoice['customerid'], $item['name'], $id, $idx )); } $DB->CommitTrans(); $SESSION->remove('invoice'); $SESSION->remove('invoiceid'); $SESSION->remove('cnote'); $SESSION->remove('invoicecontents'); $SESSION->remove('cnoteerror'); // $SESSION->redirect('?m=invoicelist'); } unset($invoice); } $SESSION->save('invoice', $invoice); $SESSION->save('cnote', $cnote); $SESSION->save('invoicecontents', $contents); $SESSION->save('cnoteerror', $error); $SMARTY->assign('error', $error); $SMARTY->assign('contents', $contents); $SMARTY->assign('cnote', $cnote); $SMARTY->assign('invoice', $invoice); $SMARTY->assign('taxeslist', $taxeslist); $SMARTY->assign('numberplanlist', $numberplanlist); $SMARTY->display('invoicenote.html'); ?>