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; }