first commit
This commit is contained in:
381
socket/Pohoda.Invoices.php
Normal file
381
socket/Pohoda.Invoices.php
Normal file
@@ -0,0 +1,381 @@
|
||||
<?php
|
||||
|
||||
function POHODA_Invoices($params)
|
||||
{
|
||||
$request = $params['request'];
|
||||
|
||||
switch ($request) {
|
||||
// odesilani zmen do POHODY
|
||||
case 'download':
|
||||
return POHODA_InvoicesDownload($params);
|
||||
break;
|
||||
|
||||
// prijimani zmen z POHODY
|
||||
case 'upload':
|
||||
return POHODA_InvoicesUpload($params);
|
||||
break;
|
||||
|
||||
// pokud je spatny pozadavek
|
||||
default:
|
||||
$response = [
|
||||
'status' => 400,
|
||||
'statusMessage' => getTextString('errors', 400),
|
||||
'serverTimestamp' => iso8601_encode(time()),
|
||||
'requestedParams' => $params,
|
||||
'responseData' => [],
|
||||
];
|
||||
|
||||
return new xmlrpcresp(php_xmlrpc_encode($response));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------
|
||||
// odesilani zmen do POHODY
|
||||
|
||||
function POHODA_InvoicesDownload($params)
|
||||
{
|
||||
$params = $params['requestParams'];
|
||||
|
||||
// logError(__FILE__, __LINE__, print_r($params, true), true);
|
||||
|
||||
// pokud neni specifikovano datum od kdy hledat udaje vrati chybu
|
||||
if (!isset($params['dateFrom'])) {
|
||||
$response = [
|
||||
'status' => 406,
|
||||
'statusMessage' => getTextString('errors', 406),
|
||||
'serverTimestamp' => iso8601_encode(time()),
|
||||
'requestedParams' => $params,
|
||||
'responseData' => [],
|
||||
];
|
||||
$response2 = php_xmlrpc_encode($response);
|
||||
|
||||
return new xmlrpcresp($response2);
|
||||
}
|
||||
|
||||
$response = [
|
||||
'status' => 200,
|
||||
'statusMessage' => getTextString('errors', 200),
|
||||
'serverTimestamp' => iso8601_encode(time()),
|
||||
'requestedParams' => $params,
|
||||
'responseData' => [],
|
||||
];
|
||||
|
||||
$query = 'SELECT * FROM '.getTableName('invoices')." WHERE date_updated >= '".date('Y-m-d H:i:s', iso8601_decode($params['dateFrom']))."'";
|
||||
|
||||
$SQL = sqlQuery($query);
|
||||
|
||||
if (sqlNumRows($SQL) == 0) {
|
||||
$response['status'] = 204;
|
||||
$response['statusMessage'] = getTextString('errors', 204);
|
||||
|
||||
return new xmlrpcresp(php_xmlrpc_encode($response));
|
||||
}
|
||||
|
||||
$count = 0;
|
||||
while ($row = @mysql_fetch_assoc($SQL)) {
|
||||
// struktura pro vraceni
|
||||
$items = [];
|
||||
$TOTAL_PRICE = 0.0;
|
||||
|
||||
// ---------------------------------------------------
|
||||
$query = 'SELECT * FROM '.getTableName('invoices_items').' WHERE id_invoice='.intval($row['id']).' ';
|
||||
$SQL2 = sqlQuery($query);
|
||||
while ($row2 = @mysql_fetch_assoc($SQL2)) {
|
||||
$priceUnit = doubleval($row2['piece_']);
|
||||
$priceTotal = doubleval($row2['total_price']);
|
||||
|
||||
// pokud se ma posilat cena uz s DPH
|
||||
if (isset($cfg['Pohoda']['payVAT']) && $cfg['Pohoda']['payVAT'] === true) {
|
||||
$priceTotal = calcPrice($priceTotal, $row2['tax']);
|
||||
}
|
||||
|
||||
$TOTAL_PRICE += $priceTotal;
|
||||
|
||||
$items[] = [
|
||||
'code' => cs_win2ascii($row2['code']),
|
||||
'text' => cs_win2ascii($row2['item_descr']),
|
||||
'quantity' => intval($row2['quantity']),
|
||||
'unit' => cs_win2ascii($row2['quantity_unit']),
|
||||
'discountPercentage' => 0.0,
|
||||
'note' => cs_win2ascii($row2['note']),
|
||||
'guaranteeQuantity' => intval($row2['guarantee']),
|
||||
'guaranteeType' => cs_win2ascii($row2['guarantee_type']),
|
||||
'currency' => cs_win2ascii($row2['currency']),
|
||||
'priceUnit' => doubleval($row2['piece_price']),
|
||||
'priceTotal' => doubleval($row2['total_price']),
|
||||
'rateVAT' => doubleval($row2['vat']),
|
||||
];
|
||||
// ---------------------------------------------------
|
||||
}
|
||||
|
||||
$currencyDetails = [];
|
||||
$currencyDetails[0] = [
|
||||
'code' => cs_win2ascii($row['currency']),
|
||||
'rate' => 1,
|
||||
'amount' => 100,
|
||||
];
|
||||
|
||||
$delivery = split("[[:space:]]\-[[:space:]]", $row['delivery_type'], 2);
|
||||
|
||||
$dataItem = [];
|
||||
$dataItem = [
|
||||
'header' => [
|
||||
'invoiceId' => intval($row['id']),
|
||||
'invoiceNumber' => cs_win2ascii($row['invoice_number']),
|
||||
'originalDocumentNumber' => cs_win2ascii($row['invoice_number_external']),
|
||||
'invoiceType' => 'issued',
|
||||
'dateCreated' => iso8601_encode(strtotime($row['date_created'])),
|
||||
'dateAccounting' => iso8601_encode(strtotime($row['date_accounting'])),
|
||||
'dateDue' => iso8601_encode(strtotime($row['date_maturity'])),
|
||||
'paymentType' => cs_win2ascii($delivery[0]),
|
||||
'note' => cs_win2ascii($row['note_user']),
|
||||
'customer' => [
|
||||
'name' => cs_win2ascii($row['customer_name']),
|
||||
'surname' => cs_win2ascii($row['customer_surname']),
|
||||
'company' => cs_win2ascii($row['customer_firm']),
|
||||
'ico' => cs_win2ascii(substr($row['customer_ico'], 0, 10)),
|
||||
'dic' => cs_win2ascii(substr($row['customer_dic'], 0, 12)),
|
||||
'street' => cs_win2ascii($row['customer_street']),
|
||||
'city' => cs_win2ascii($row['customer_city']),
|
||||
'zip' => cs_win2ascii(substr($row['customer_zip'], 0, 5)),
|
||||
'country' => cs_win2ascii($row['customer_country']),
|
||||
'phone' => cs_win2ascii($row['customer_phone']),
|
||||
'email' => cs_win2ascii($row['customer_email']),
|
||||
],
|
||||
'bank' => [
|
||||
'accountNo' => cs_win2ascii($row['bank_account_number']),
|
||||
'code' => cs_win2ascii($row['bank_code']),
|
||||
'symVar' => cs_win2ascii($row['bank_var_symbol']),
|
||||
'symConst' => cs_win2ascii($row['bank_konst_symbol']),
|
||||
'symSpec' => cs_win2ascii($row['bank_spec_symbol']),
|
||||
'bankName' => cs_win2ascii($row['bank_name']),
|
||||
],
|
||||
],
|
||||
'items' => $items,
|
||||
'summary' => [
|
||||
'priceRounding' => 0,
|
||||
'priceTotal' => doubleval($TOTAL_PRICE),
|
||||
'currency' => cs_win2ascii($row['currency']),
|
||||
'currencyDetails' => $currencyDetails,
|
||||
],
|
||||
];
|
||||
|
||||
// logError(__FILE__, __LINE__, print_r($dataItem, true), true);
|
||||
|
||||
$response['responseData'][$count] = $dataItem;
|
||||
// $response['responseData'][$count] = $row;
|
||||
$count++;
|
||||
|
||||
unset($delivery);
|
||||
}
|
||||
|
||||
return new xmlrpcresp(php_xmlrpc_encode($response));
|
||||
}
|
||||
|
||||
// ----------------------------------------------------
|
||||
// prijimani zmen z POHODY
|
||||
|
||||
function POHODA_InvoicesUpload($params)
|
||||
{
|
||||
$requestParams = $params['requestParams'];
|
||||
|
||||
$params = $params['requestData'];
|
||||
|
||||
// logError(__FILE__, __LINE__, print_r($params, true), true);
|
||||
|
||||
$response = [
|
||||
'status' => 200,
|
||||
'statusMessage' => getTextString('errors', 200),
|
||||
'requestedParams' => $requestParams,
|
||||
'responseData' => [],
|
||||
];
|
||||
|
||||
// logError(__FILE__, __LINE__, "pocet: ".count($params), true);
|
||||
|
||||
for ($i = 0; $i < count($params); $i++) {
|
||||
// pokud se posle dataItemStatus deleted smaze polozku z databaze
|
||||
if (isset($params[$i]['dataItemStatus']) && ($params[$i]['dataItemStatus'] == 'deleted')) {
|
||||
if (isset($params[$i]['header']['invoiceId']) && (!empty($params[$i]['header']['invoiceId']) || $params[$i]['header']['invoiceId'] != 0)) {
|
||||
if (mysql_affected_rows() != 0) {
|
||||
$structItemDetails = POHODA_getDataItemDetails($params[$i]['header']['invoiceId'], 'ok', 200, '');
|
||||
$response['responseData'][$i] = $structItemDetails;
|
||||
} else {
|
||||
$structItemDetails = POHODA_getDataItemDetails($params[$i]['header']['invoiceId'], 'warning', 404, '');
|
||||
$response['responseData'][$i] = $structItemDetails;
|
||||
}
|
||||
|
||||
continue;
|
||||
} else {
|
||||
$structItemDetails = POHODA_getDataItemDetails(0, 'error', 400, '');
|
||||
$response['responseData'][$i] = $structItemDetails;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// pokud se preda invoiceId nebo neni nulove provede se update polozky, jinak se vlozi nova
|
||||
if (isset($params[$i]['header']['invoiceId']) && (!empty($params[$i]['header']['invoiceId']) || $params[$i]['header']['invoiceId'] != 0)) {
|
||||
$update = true;
|
||||
$queryHead = 'UPDATE '.getTableName('invoices').' SET ';
|
||||
} else {
|
||||
$update = false;
|
||||
$queryHead = 'INSERT INTO '.getTableName('invoices').' SET ';
|
||||
}
|
||||
|
||||
$query = '';
|
||||
$type = ($params[$i]['header']['invoiceType'] == 'issued') ? 'invoice_out' : 'invoice_in';
|
||||
|
||||
if (!$update) {
|
||||
$query .= 'type_counter='.intval($GLOBALS['invoices-'.$type.'-counter']).', ';
|
||||
}
|
||||
$query .= (isset($params[$i]['header']['invoiceNumber'])) ? "invoice_number='".utf8ToWin1250($params[$i]['header']['invoiceNumber'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['invoiceType'])) ? "type='".utf8ToWin1250($type)."', " : '';
|
||||
$query .= (isset($params[$i]['header']['paymentType'])) ? "settlement_method='".utf8ToWin1250($params[$i]['header']['paymentType'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['name'])) ? "customer_name='".utf8ToWin1250($params[$i]['header']['customer']['name'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['surname'])) ? "customer_surname='".utf8ToWin1250($params[$i]['header']['customer']['surname'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['company'])) ? "customer_firm='".utf8ToWin1250($params[$i]['header']['customer']['company'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['street'])) ? "customer_street='".utf8ToWin1250($params[$i]['header']['customer']['street'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['city'])) ? "customer_city='".utf8ToWin1250($params[$i]['header']['customer']['city'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['zip'])) ? "customer_zip='".utf8ToWin1250($params[$i]['header']['customer']['zip'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['email'])) ? "customer_email='".utf8ToWin1250($params[$i]['header']['customer']['email'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['country'])) ? "customer_country='".utf8ToWin1250($params[$i]['header']['customer']['country'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['ico'])) ? "customer_ico='".utf8ToWin1250($params[$i]['header']['customer']['ico'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['dic'])) ? "customer_dic='".utf8ToWin1250($params[$i]['header']['customer']['dic'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['customer']['phone'])) ? "customer_phone='".utf8ToWin1250($params[$i]['header']['customer']['phone'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['dateCreated'])) ? "date_created='".date('Y-m-d H:i:s', iso8601_decode($params[$i]['header']['dateCreated']))."', " : '';
|
||||
$query .= (isset($params[$i]['header']['dateAccounting'])) ? "date_accounting='".date('Y-m-d H:i:s', iso8601_decode($params[$i]['header']['dateAccounting']))."', " : '';
|
||||
$query .= "date_updated='".date('Y-m-d H:i:s')."', ";
|
||||
$query .= (isset($params[$i]['header']['dateDue'])) ? "date_maturity='".date('Y-m-d H:i:s', iso8601_decode($params[$i]['header']['dateDue']))."', " : '';
|
||||
$query .= (isset($params[$i]['summary']['priceTotal'])) ? "total_price='".utf8ToWin1250($params[$i]['summary']['priceTotal'])."', " : '';
|
||||
$query .= (isset($params[$i]['summary']['currency'])) ? "currency='".utf8ToWin1250($params[$i]['summary']['currency'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['bank']['accountNo'])) ? "bank_account_number='".utf8ToWin1250($params[$i]['header']['bank']['accountNo'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['bank']['code'])) ? "bank_code='".utf8ToWin1250($params[$i]['header']['bank']['code'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['bank']['symVar'])) ? "bank_var_symbol='".utf8ToWin1250($params[$i]['header']['bank']['symVar'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['bank']['symConst'])) ? "bank_konst_symbol='".utf8ToWin1250($params[$i]['header']['bank']['symConst'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['bank']['symSpec'])) ? "bank_spec_symbol='".utf8ToWin1250($params[$i]['header']['bank']['symSpec'])."', " : '';
|
||||
$query .= (isset($params[$i]['header']['bank']['bankName'])) ? "bank_name='".utf8ToWin1250($params[$i]['header']['bank']['bankName'])."', " : '';
|
||||
$query = substr($query, 0, -2);
|
||||
|
||||
if ($update) {
|
||||
$queryEnd = 'WHERE id='.intval($params[$i]['header']['invoiceId']);
|
||||
} else {
|
||||
$queryEnd = '';
|
||||
}
|
||||
|
||||
// logError(__FILE__, __LINE__, $queryHead.$query.$queryEnd, true);
|
||||
|
||||
$SQL = sqlQuery($queryHead.$query.$queryEnd);
|
||||
|
||||
// pokud byl vlozen nebo upraven radek vrati type "ok" a status 200 nebo "warning" a jiny status
|
||||
// pokud nedoslo k upraveni radky ani k vlozeni noveho vrati "error"
|
||||
if (mysql_affected_rows() != 0) {
|
||||
// die("ASDAS");
|
||||
if ($update) {
|
||||
$invoiceId = $params[$i]['header']['invoiceId'];
|
||||
$structItemDetails = POHODA_getDataItemDetails($invoiceId, 'ok', 200);
|
||||
|
||||
// ulozeni polozek objednavky
|
||||
$results = POHODA_InvoicesItemsUpload($params[$i], $invoiceId);
|
||||
} else {
|
||||
$invoiceId = mysql_insert_id();
|
||||
|
||||
// ulozeni polozek objednavky
|
||||
$results = POHODA_InvoicesItemsUpload($params[$i], $invoiceId);
|
||||
|
||||
$values = POHODA_setDataItemValues('invoiceId', $params[$i]['header']['invoiceId'], 'id', $invoiceId);
|
||||
$structItemDetails = POHODA_getDataItemDetails($invoiceId, 'ok', 200, $values);
|
||||
}
|
||||
|
||||
for ($j = 1; $j <= count($results); $j++) {
|
||||
$structItemDetails['dataItemDetails'][$j]['type'] = $results[$j - 1]['type'];
|
||||
$structItemDetails['dataItemDetails'][$j]['status'] = $results[$j - 1]['status'];
|
||||
$structItemDetails['dataItemDetails'][$j]['statusMessage'] = getTextString('errors', $results[$j - 1]['status']);
|
||||
}
|
||||
} elseif ($update) {
|
||||
// byla pozadovana uprava polozky ale contactId predane v params neexistuje v databazi
|
||||
// vlozi se jako nova polozka a vrati se id nove polozky
|
||||
$queryHead = 'INSERT INTO '.getTableName('invoices').' SET ';
|
||||
|
||||
// logError(__FILE__, __LINE__, "spatne id pokus o vlozeni nove polozky: ".$queryHead.$query, true);
|
||||
|
||||
$SQL = sqlQuery($queryHead.$query);
|
||||
$invoiceId = mysql_insert_id();
|
||||
|
||||
if (mysql_affected_rows() != 0) {
|
||||
$ID = sqlInsertId();
|
||||
|
||||
// ulozeni polozek objednavky
|
||||
$result = POHODA_InvoicesItemsUpload($params[$i], $invoiceId);
|
||||
|
||||
$values = POHODA_setDataItemValues('invoiceId', $params[$i]['header']['invoiceId'], 'id', $invoiceId);
|
||||
$structItemDetails = POHODA_getDataItemDetails($ID, 'warning', 206, $values);
|
||||
|
||||
for ($j = 1; $j <= count($results); $j++) {
|
||||
$structItemDetails['dataItemDetails'][$j]['type'] = $results[$j - 1]['type'];
|
||||
$structItemDetails['dataItemDetails'][$j]['status'] = $results[$j - 1]['status'];
|
||||
$structItemDetails['dataItemDetails'][$j]['statusMessage'] = getTextString('errors', $results[$j - 1]['status']);
|
||||
}
|
||||
} else {
|
||||
$values = POHODA_setDataItemValues('invoiceId', $params[$i]['header']['invoiceId'], 'id', 0);
|
||||
$structItemDetails = POHODA_getDataItemDetails($params[$i]['header']['invoiceId'], 'error', 404, $values);
|
||||
}
|
||||
} else {
|
||||
$structItemDetails = POHODA_getDataItemDetails(0, 'error', 500, '');
|
||||
}
|
||||
|
||||
$response['responseData'][$i] = $structItemDetails;
|
||||
}
|
||||
|
||||
// logError(__FILE__, __LINE__, print_r($response['responseData'], true), true);
|
||||
|
||||
return new xmlrpcresp(php_xmlrpc_encode($response));
|
||||
}
|
||||
|
||||
// smaze dosavadni polozky objednavky a ulozi nove
|
||||
function POHODA_InvoicesItemsUpload($params, $invoiceId)
|
||||
{
|
||||
$params = $params['items'];
|
||||
|
||||
$result = [];
|
||||
|
||||
// logError(__FILE__, __LINE__, print_r($params, true), true);
|
||||
|
||||
// smazani dosavadnich polozek objednavky
|
||||
for ($i = 0; $i < count($params); $i++) {
|
||||
$query = '';
|
||||
|
||||
$priceUnit = doubleval($params[$i]['priceUnit']);
|
||||
$priceTotal = doubleval($params[$i]['priceTotal']);
|
||||
$vat = doubleval($params[$i]['rateVAT']);
|
||||
/*// pokud je sleva
|
||||
if(isset($params[$i]['discountPercentage']) && $params[$i]['discountPercentage'] > 0)
|
||||
{
|
||||
$priceUnit = doubleval(number_format((doubleval($params[$i]['priceUnit']) - (doubleval($params[$i]['priceUnit']) * (abs(doubleval($params[$i]['discountPercentage'])) / 100))), 3, ".", ""));
|
||||
$priceTotal = doubleval(number_format((doubleval($params[$i]['priceTotal']) - (doubleval($params[$i]['priceTotal']) * (abs(doubleval($params[$i]['discountPercentage'])) / 100))), 3, ".", ""));
|
||||
}*/
|
||||
|
||||
// pokud se ma posilat cena uz s DPH
|
||||
if (isset($cfg['Pohoda']['payVAT']) && $cfg['Pohoda']['payVAT'] === true && $vat > 0) {
|
||||
$priceUnit = doubleval(number_format($priceUnit / (1 + ($vat / 100)), 3, '.', ''));
|
||||
$priceTotal = doubleval(number_format($priceTotal / (1 + ($vat / 100)), 3, '.', ''));
|
||||
}
|
||||
|
||||
$query .= 'id_invoice='.intval($invoiceId).'';
|
||||
$query .= (isset($params[$i]['code'])) ? ", code='".utf8ToWin1250($params[$i]['code'])."'" : '';
|
||||
$query .= (isset($params[$i]['text'])) ? ", item_descr='".utf8ToWin1250($params[$i]['text'])."'" : '';
|
||||
$query .= (isset($params[$i]['quantity'])) ? ', quantity='.intval($params[$i]['quantity']).'' : '';
|
||||
$query .= (isset($params[$i]['unit'])) ? ", quantity_unit='".utf8ToWin1250($params[$i]['unit'])."'" : '';
|
||||
$query .= (isset($params[$i]['guaranteeQuantity'])) ? ", guarantee='".intval($params[$i]['guaranteeQuantity'])."'" : '';
|
||||
$query .= (isset($params[$i]['guaranteeType'])) ? ", guarantee_type='".utf8ToWin1250($params[$i]['guaranteeType'])."'" : '';
|
||||
$query .= (isset($params[$i]['currency'])) ? ", currency='".utf8ToWin1250($params[$i]['currency'])."'" : '';
|
||||
$query .= (isset($params[$i]['priceUnit'])) ? ", piece_price='".doubleval($priceUnit)."'" : '';
|
||||
$query .= (isset($params[$i]['priceTotal'])) ? ", total_price='".doubleval($priceTotal)."'" : '';
|
||||
$query .= (isset($params[$i]['rateVAT'])) ? ", vat='".doubleval($params[$i]['rateVAT'])."'" : '';
|
||||
|
||||
// logError(__FILE__, __LINE__, $queryHead.$query, true);
|
||||
|
||||
$SQL = sqlQuery($queryHead.$query);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
Reference in New Issue
Block a user