Ottimizzazione API interventi

Fix completo #109.
This commit is contained in:
Thomas Zilio 2018-05-12 10:50:51 +02:00
parent 7f3f4c4868
commit 207108e02b
8 changed files with 91 additions and 100 deletions

View File

@ -11,7 +11,7 @@ switch (post('op')) {
'subject' => $post['subject'],
]);
$id_record = $dbo->last_inserted_id();
$id_record = $dbo->lastInsertedID();
$_SESSION['infos'][] = tr('Aggiunto nuovo template per le email!');

View File

@ -2,37 +2,40 @@
switch ($resource) {
case 'sync':
$dbo->query("UPDATE in_interventi_tecnici SET summary=(SELECT ragione_sociale FROM an_anagrafiche INNER JOIN in_interventi ON an_anagrafiche.idanagrafica=in_interventi.idanagrafica WHERE in_interventi.id=in_interventi_tecnici.idintervento) WHERE summary=''");
$dbo->query("UPDATE in_interventi_tecnici SET uid=id WHERE uid=''");
// Normalizzazione degli interventi a database
$dbo->query('UPDATE in_interventi_tecnici SET summary = (SELECT ragione_sociale FROM an_anagrafiche INNER JOIN in_interventi ON an_anagrafiche.idanagrafica=in_interventi.idanagrafica WHERE in_interventi.id=in_interventi_tecnici.idintervento) WHERE summary IS NULL');
$dbo->query('UPDATE in_interventi_tecnici SET uid = id WHERE uid IS NULL');
// Individuazione degli interventi
$query = 'SELECT in_interventi_tecnici.id AS idriga, in_interventi_tecnici.idintervento, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS cliente, richiesta, orario_inizio, orario_fine, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico, summary FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE CAST(orario_inizio AS DATE) BETWEEN CURDATE()-INTERVAL 7 DAY AND CURDATE()+INTERVAL 3 MONTH AND deleted=0';
if (!empty($user['idanagrafica'])) {
$query = 'SELECT in_interventi_tecnici.id AS idriga, in_interventi_tecnici.idintervento, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS cliente, richiesta, orario_inizio, orario_fine, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico, summary FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE CAST(orario_inizio AS DATE) BETWEEN CURDATE()-INTERVAL 7 DAY AND CURDATE()+INTERVAL 3 MONTH AND in_interventi_tecnici.idtecnico="'.$user['idanagrafica'].'" AND deleted=0';
} else {
$query = 'SELECT in_interventi_tecnici.id AS idriga, in_interventi_tecnici.idintervento, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS cliente, richiesta, orario_inizio, orario_fine, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico, summary FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE CAST(orario_inizio AS DATE) BETWEEN CURDATE()-INTERVAL 7 DAY AND CURDATE()+INTERVAL 3 MONTH AND deleted=0';
$query .= ' AND in_interventi_tecnici.idtecnico = '.prepare($user['idanagrafica']);
}
$rs = $dbo->fetchArray($query);
$results = [];
$results['custom'] = '';
$results['custom'] .= "BEGIN:VCALENDAR\n";
$results['custom'] .= "VERSION:2.0\n";
$results['custom'] .= 'VERSION:'.Update::getVersion()."\n";
$results['custom'] .= "PRODID:-// OpenSTAManager\n";
for ($i = 0; $i < sizeof($rs); ++$i) {
$richiesta = str_replace("\r\n", "\n", $rs[$i]['richiesta']);
foreach ($rs as $r) {
$richiesta = str_replace("\r\n", "\n", $r['richiesta']);
$richiesta = str_replace("\r", "\n", $richiesta);
$richiesta = str_replace("\n", '\\n', $richiesta);
$oggetto = str_replace("\r\n", "\n", $rs[$i]['oggetto']);
$r['summary'] = str_replace("\r\n", "\n", $r['summary']);
$results['custom'] .= "BEGIN:VEVENT\n";
$results['custom'] .= 'UID:'.$rs[$i]['idriga']."\n";
$results['custom'] .= 'UID:'.$r['idriga']."\n";
$results['custom'] .= 'DTSTAMP:'.date('Ymd').'T'.date('His')."\n";
$results['custom'] .= 'ORGANIZER;CN='.$azienda.':MAILTO:'.$email."\n";
$results['custom'] .= 'DTSTART:'.date('Ymd', strtotime($rs[$i]['orario_inizio'])).'T'.date('His', strtotime($rs[$i]['orario_inizio']))."\n";
$results['custom'] .= 'DTEND:'.date('Ymd', strtotime($rs[$i]['orario_fine'])).'T'.date('His', strtotime($rs[$i]['orario_fine']))."\n";
$results['custom'] .= 'SUMMARY:'.html_entity_decode($rs[$i]['summary'])."\n";
//$results['custom'] .= 'ORGANIZER;CN='.$azienda.':MAILTO:'.$email."\n";
$results['custom'] .= 'DTSTART:'.date('Ymd', strtotime($r['orario_inizio'])).'T'.date('His', strtotime($r['orario_inizio']))."\n";
$results['custom'] .= 'DTEND:'.date('Ymd', strtotime($r['orario_fine'])).'T'.date('His', strtotime($r['orario_fine']))."\n";
$results['custom'] .= 'SUMMARY:'.html_entity_decode($r['summary'])."\n";
$results['custom'] .= 'DESCRIPTION:'.html_entity_decode($richiesta, ENT_QUOTES, 'UTF-8')."\n";
$results['custom'] .= "END:VEVENT\n";
}

View File

@ -2,6 +2,11 @@
switch ($resource) {
case 'sync':
// Normalizzazione degli interventi a database
$dbo->query('UPDATE in_interventi_tecnici SET summary = (SELECT ragione_sociale FROM an_anagrafiche INNER JOIN in_interventi ON an_anagrafiche.idanagrafica=in_interventi.idanagrafica WHERE in_interventi.id=in_interventi_tecnici.idintervento) WHERE summary IS NULL');
$dbo->query('UPDATE in_interventi_tecnici SET uid = id WHERE uid IS NULL');
// Interpretazione degli eventi
$idtecnico = $user['idanagrafica'];
$response = API::getRequest(true);
@ -9,111 +14,88 @@ switch ($resource) {
$ical = new iCalEasyReader();
$events = $ical->load($response);
for ($j = 0; $j < sizeof($events['VEVENT']); ++$j) {
$description = $events['VEVENT'][$j]['DESCRIPTION'];
foreach ($events['VEVENT'] as $event) {
$description = $event['DESCRIPTION'];
// idriga di in_interventi_tecnici
if (strstr($events['VEVENT'][$j]['UID'], '-')) {
// Individuazione idriga di in_interventi_tecnici
if (str_contains($event['UID'], '-')) {
$idriga = 'NEW';
} else {
$idriga = $events['VEVENT'][$j]['UID'];
$idriga = $event['UID'];
}
// Data-ora inizio
$dataora = explode('T', $events['VEVENT'][$j]['DTSTART']);
$data = $dataora[0];
$ora = $dataora[1];
// Timestamp di inizio
$orario_inizio = DateTime::createFromFormat('Ymd\\THi', $event['DTSTART'])->format(Intl\Formatter::getStandardFormats()['timestamp']);
$Y = substr($data, 0, 4);
$m = substr($data, 4, 2);
$d = substr($data, 6, 2);
$H = substr($ora, 0, 2);
$i = substr($ora, 2, 2);
$orario_inizio = "$Y-$m-$d $H:$i:00";
// Data-ora fine
$dataora = explode('T', $events['VEVENT'][$j]['DTEND']);
$data = $dataora[0];
$ora = $dataora[1];
$Y = substr($data, 0, 4);
$m = substr($data, 4, 2);
$d = substr($data, 6, 2);
$H = substr($ora, 0, 2);
$i = substr($ora, 2, 2);
$orario_fine = "$Y-$m-$d $H:$i:00";
// Timestamp di fine
$orario_fine = DateTime::createFromFormat('Ymd\\THi', $event['DTEND'])->format(Intl\Formatter::getStandardFormats()['timestamp']);
// Descrizione
$richiesta = $events['VEVENT'][$j]['DESCRIPTION'];
$richiesta = $event['DESCRIPTION'];
$richiesta = str_replace('\\r\\n', "\n", $richiesta);
$richiesta = str_replace('\\n', "\n", $richiesta);
$oggetto = trim($events['VEVENT'][$j]['SUMMARY']);
$richiesta = str_replace('\\r\\n', "\n", $richiesta);
$richiesta = str_replace('\\n', "\n", $richiesta);
$summary = trim($event['SUMMARY']);
$summary = str_replace('\\r\\n', "\n", $summary);
$summary = str_replace('\\n', "\n", $summary);
// Nuova attività
if ($idriga == 'NEW') {
// Data-ora inizio
$dataora = explode('T', $events['VEVENT'][$j]['DTSTART']['value']);
$data = $dataora[0];
$ora = $dataora[1];
$rs_copie = $dbo->fetchArray('SELECT * FROM in_interventi_tecnici WHERE uid = '.prepare($event['UID']));
$Y = substr($data, 0, 4);
$m = substr($data, 4, 2);
$d = substr($data, 6, 2);
if (!empty($rs_copie)) {
$idintervento = $rs_copie[0]['idintervento'];
$H = substr($ora, 0, 2);
$i = substr($ora, 2, 2);
$dbo->update('in_interventi_tecnici', [
'orario_inizio' => $orario_inizio,
'orario_fine' => $orario_fine,
'summary' => $summary,
], [
'uid' => $event['UID'],
'idtecnico' => $idtecnico,
]);
$orario_inizio = "$Y-$m-$d $H:$i:00";
// Data-ora fine
$dataora = explode('T', $events['VEVENT'][$j]['DTEND']['value']);
$data = $dataora[0];
$ora = $dataora[1];
$Y = substr($data, 0, 4);
$m = substr($data, 4, 2);
$d = substr($data, 6, 2);
$H = substr($ora, 0, 2);
$i = substr($ora, 2, 2);
$orario_fine = "$Y-$m-$d $H:$i:00";
$rs_copie = $dbo->fetchArray("SELECT * FROM in_interventi_tecnici WHERE uid='".$events['VEVENT'][$j]['UID']."'");
if (sizeof($rs_copie) > 0) {
$query = 'UPDATE in_interventi_tecnici SET orario_inizio="'.$orario_inizio.'", orario_fine="'.$orario_fine.'", summary="'.prepare($oggetto).'" WHERE uid="'.$events['VEVENT'][$j]['UID'].'" AND idtecnico="'.$idtecnico.'"';
$dbo->query($query);
$query = 'UPDATE in_interventi SET richiesta="'.prepare($richiesta).'", oggetto="'.prepare($oggetto)."\" WHERE idintervento=(SELECT idintervento FROM in_interventi_tecnici WHERE idintervento='".$rs_copie[0]['idintervento']."' AND idtecnico=\"".$idtecnico.'" LIMIT 0,1)';
$dbo->query($query);
$dbo->query('UPDATE in_interventi SET richiesta='.prepare($richiesta).', oggetto='.prepare($summary).' WHERE idintervento = (SELECT idintervento FROM in_interventi_tecnici WHERE idintervento = '.prepare($idintervento).' AND idtecnico = '.prepare($idtecnico).' LIMIT 0,1)');
$idriga = $rs_copie[0]['id'];
} else {
$idintervento = get_new_idintervento();
$query = 'INSERT INTO in_interventi( idintervento, idanagrafica, data_richiesta, richiesta, idtipointervento, idstatointervento, oggetto ) VALUES( "'.$idintervento."\", (SELECT valore FROM zz_impostazioni WHERE nome='Azienda predefinita'), NOW(), \"".prepare($richiesta).'", 0, "CALL", "'.prepare($oggetto).'" )';
$dbo->query($query);
$query = 'INSERT INTO in_interventi_tecnici( idintervento, idtecnico, orario_inizio, orario_fine, summary, uid ) VALUES( "'.$idintervento.'", "'.$idtecnico.'", "'.$orario_inizio.'", "'.$orario_fine.'", "'.$oggetto.'", "'.$events['VEVENT'][$j]['UID'].'" )';
$dbo->query($query);
$dbo->insert('in_interventi', [
'idintervento' => $idintervento,
'#idanagrafica' => "(SELECT valore FROM zz_impostazioni WHERE nome='Azienda predefinita')",
'#data_richiesta' => 'NOW()',
'richiesta' => $richiesta,
'idtipointervento' => 0,
'idstatointervento' => 'CALL',
'oggetto' => $summary,
]);
$idriga = $dbo->last_inserted_id();
$dbo->insert('in_interventi', [
'idintervento' => $idintervento,
'idtecnico' => $idtecnico,
'orario_inizio' => $orario_inizio,
'orario_fine' => $orario_fine,
'summary' => $summary,
'uid' => $event['UID'],
]);
$idriga = $dbo->lastInsertedID();
}
}
// Modifica attività esistente
else {
$query = 'UPDATE in_interventi_tecnici SET orario_inizio="'.$orario_inizio.'", orario_fine="'.$orario_fine.'", summary="'.prepare($oggetto).'" WHERE id="'.$idriga.'" AND idtecnico="'.$idtecnico.'"';
$dbo->query($query);
$dbo->update('in_interventi_tecnici', [
'orario_inizio' => $orario_inizio,
'orario_fine' => $orario_fine,
'summary' => $summary,
], [
'id' => $idriga,
'idtecnico' => $idtecnico,
]);
$query = 'UPDATE in_interventi SET richiesta="'.prepare($richiesta).'", oggetto="'.prepare($oggetto).'" WHERE idintervento=(SELECT idintervento FROM in_interventi_tecnici WHERE id="'.$idriga.'" AND idtecnico="'.$idtecnico.'" LIMIT 0,1)';
$query = 'UPDATE in_interventi SET richiesta='.prepare($richiesta).', oggetto='.prepare($summary).' WHERE idintervento = (SELECT idintervento FROM in_interventi_tecnici WHERE id = '.prepare($idriga).' AND idtecnico = '.prepare($idtecnico).' LIMIT 0,1)';
$dbo->query($query);
}

View File

@ -50,7 +50,7 @@ switch (post('op')) {
'predefined' => $predefined,
]);
$id_record = $dbo->last_inserted_id();
$id_record = $dbo->lastInsertedID();
$_SESSION['infos'][] = tr('Nuovo segmento aggiunto');

View File

@ -10,7 +10,7 @@ switch (post('op')) {
'from_address' => $post['from_address'],
]);
$id_record = $dbo->last_inserted_id();
$id_record = $dbo->lastInsertedID();
$_SESSION['infos'][] = tr('Nuovo account email aggiunto!');

View File

@ -19,7 +19,7 @@ class DateHandler implements HandlerInterface
];
foreach ($detect as $attr) {
if ($values[$attr] == '-now-') {
$values[$attr] = date(\Translator::getFormatter()->getStandardFormats()['timestamp']);
$values[$attr] = date(\Intl\Formatter::getStandardFormats()['timestamp']);
}
}

View File

@ -53,7 +53,7 @@ class Formatter
*
* @return array
*/
public function getStandardFormats()
public static function getStandardFormats()
{
return static::$standards;
}
@ -123,9 +123,9 @@ class Formatter
if (is_object($this->numberFormatter)) {
$result = $this->numberFormatter->format($value);
} else {
$number = number_format($value, $this->getPrecision(), $this->getStandardFormats()['number']['decimals'], $this->getStandardFormats()['number']['thousands']);
$number = number_format($value, $this->getPrecision(), self::getStandardFormats()['number']['decimals'], self::getStandardFormats()['number']['thousands']);
$result = $this->customNumber($number, $this->getStandardFormats()['number'], $this->getNumberSeparators());
$result = $this->customNumber($number, self::getStandardFormats()['number'], $this->getNumberSeparators());
}
if (isset($decimals)) {
@ -164,7 +164,7 @@ class Formatter
if (is_object($this->numberFormatter)) {
$result = $this->numberFormatter->parse($value);
} else {
$result = $this->customNumber($value, $this->getNumberSeparators(), $this->getStandardFormats()['number']);
$result = $this->customNumber($value, $this->getNumberSeparators(), self::getStandardFormats()['number']);
}
$result = is_numeric($result) ? floatval($result) : false;

View File

@ -44,7 +44,7 @@ CREATE TABLE IF NOT EXISTS `co_movimenti_modelli` (
ALTER TABLE `co_movimenti_modelli` ADD PRIMARY KEY (`id`);
ALTER TABLE `co_movimenti_modelli` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
-- Modulo modelli prima nota
INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES (NULL, 'Modelli prima nota', 'Modelli prima nota', 'modelli_primanota', 'SELECT |select| FROM `co_movimenti_modelli` WHERE 1=1 GROUP BY `idmastrino` HAVING 2=2', '', 'fa fa-angle-right', '2.4.1', '2.4.1', '1', '40', '1', '1');
@ -105,4 +105,10 @@ ALTER TABLE `mg_movimenti` ADD `data` DATE NOT NULL AFTER `movimento`;
ALTER TABLE `mg_movimenti` ADD `manuale` TINYINT(1) NOT NULL AFTER `data`;
-- Aggiunta possibilità di selezionare anche i conti in 620 Costi diversi negli acquisti
UPDATE `co_pianodeiconti2` SET `dir` = 'uscita' WHERE `co_pianodeiconti2`.`descrizione` = 'Costi diversi';
UPDATE `co_pianodeiconti2` SET `dir` = 'uscita' WHERE `co_pianodeiconti2`.`descrizione` = 'Costi diversi';
-- Supporto al valore NULL per uid e summary in in_interventi_tecnici
ALTER TABLE `in_interventi_tecnici` CHANGE `uid` `uid` VARCHAR(255), CHANGE `summary` `summary` VARCHAR(255);
UPDATE `in_interventi_tecnici` SET `uid` = NULL WHERE `uid` = '';
UPDATE `in_interventi_tecnici` SET `summary` = NULL WHERE `summary` = '';
ALTER TABLE `in_interventi_tecnici` CHANGE `uid` `uid` int(11);