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');
?>