Have a trigger in Postgre and Mysql
CREATE FUNCTION fn_saldiadd() RETURNS trigger
LANGUAGE plpgsql COST 1000
AS $$
BEGIN
IF (SELECT COUNT(*) FROM giacenzamagazzino WHERE deposito=New.deposito AND azienda=New.azienda AND articolo=New.articolo AND esercizio=New.esercizio) = 0
THEN
-- inserisce il record se non esiste
INSERT INTO giacenzamagazzino
(esercizio,deposito,articolo,azienda,nomeutentecrea,quantitacarico,
valorecarico,quantitascarico,valorescarico,quantitatxcarico,valoretxcarico,
quantitatxscarico,valoretxscarico,giacenzainiziale,valgiacienzainiziale )
VALUES ( NEW.esercizio, NEW.deposito, NEW.articolo,
NEW.azienda, NEW.nomeutentecrea,
-- quantita carico
CASE NEW.qtacarico
WHEN '+' then NEW.quantita
WHEN '-' then - NEW.quantita
ELSE 0
END,
-- valore carico
CASE NEW.valcarico
WHEN '+' then f_sconti(NEW.valore,NEW.sconto)
WHEN '-' then - f_sconti(NEW.valore,NEW.sconto)
ELSE 0
END,
-- quantita scarico
CASE NEW.qtascarico
WHEN '+' then NEW.quantita
WHEN '-' then - NEW.quantita
ELSE 0
END,
-- valore scarico
CASE NEW.valscarico
WHEN '+' then f_sconti(NEW.valore,NEW.sconto)
WHEN '-' then - f_sconti(NEW.valore,NEW.sconto)
ELSE 0
END,
-- quantita carico per trasferimento
CASE NEW.qtatxcarico
WHEN '+' then NEW.quantita
WHEN '-' then - NEW.quantita
ELSE 0
END,
-- valore carico per trasferimento
CASE NEW.valtxcarico
WHEN '+' then f_sconti(NEW.valore,NEW.sconto)
WHEN '-' then - f_sconti(NEW.valore,NEW.sconto)
ELSE 0
END,
-- quantita scarico per trasferimento
CASE NEW.qtatxscarico
WHEN '+' then NEW.quantita
WHEN '-' then - NEW.quantita
ELSE 0
END,
-- valore scarico per trasderimento
CASE NEW.valtxscarico
WHEN '+' then f_sconti(NEW.valore,NEW.sconto)
WHEN '-' then - f_sconti(NEW.valore,NEW.sconto)
ELSE 0
END,
-- quantita per rettifica
CASE NEW.qtarettifica
WHEN '+' then NEW.quantita
WHEN '-' then - NEW.quantita
ELSE 0
END,
-- valore per rettifica
CASE NEW.valrettifica
WHEN '+' then f_sconti(NEW.valore,NEW.sconto)
WHEN '-' then - f_sconti(NEW.valore,NEW.sconto)
ELSE 0
END );
ELSE
-- nel caso invece il record esista aggiorno i valori
UPDATE giacenzamagazzino
-- quantita carico
SET quantitacarico = (CASE NEW.qtacarico
WHEN '+' THEN quantitacarico + NEW.quantita
WHEN '-' then quantitacarico - NEW.quantita
ELSE quantitacarico
END),
-- valore carico
valorecarico = (CASE NEW.valcarico
WHEN '+' THEN valorecarico + f_sconti(NEW.valore,NEW.sconto)
WHEN '-' THEN valorecarico - f_sconti(NEW.valore,NEW.sconto)
ELSE valorecarico
END),
-- quantita scarico
quantitascarico = (CASE NEW.qtascarico
WHEN '+' THEN quantitascarico + NEW.quantita
WHEN '-' THEN quantitascarico - NEW.quantita
ELSE quantitascarico
END),
-- valore scarico
valorescarico = (CASE NEW.valscarico
WHEN '+' THEN valorescarico + f_sconti(NEW.valore,NEW.sconto)
WHEN '-' THEN valorescarico - f_sconti(NEW.valore,NEW.sconto)
ELSE valorescarico
END),
-- quantita carico per trasferimento
quantitatxcarico = CASE NEW.qtatxcarico
WHEN '+' THEN quantitatxcarico + NEW.quantita
WHEN '-' THEN quantitatxcarico - NEW.quantita
ELSE quantitatxcarico
END,
-- valore carico per trasferimento
valoretxcarico = (CASE NEW.valtxcarico
WHEN '+' THEN valoretxcarico + f_sconti(NEW.valore,NEW.sconto)
WHEN '-' THEN valoretxcarico - f_sconti(NEW.valore,NEW.sconto)
ELSE valoretxcarico
END),
-- quantita scarico per trasferimento
quantitatxscarico = (CASE NEW.qtatxscarico
WHEN '+' THEN quantitatxscarico + NEW.quantita
WHEN '-' THEN quantitatxscarico - NEW.quantita
ELSE valoretxscarico
END),
-- valore scarico per trasferimento
valoretxscarico = (CASE NEW.valtxscarico
WHEN '+' THEN valoretxscarico + f_sconti(NEW.valore,NEW.sconto)
WHEN '-' THEN valoretxscarico - f_sconti(NEW.valore,NEW.sconto)
ELSE valoretxscarico
END),
-- quantita rettifica
giacenzainiziale = (CASE NEW.qtarettifica
WHEN '+' THEN giacenzainiziale + NEW.quantita
WHEN '-' THEN giacenzainiziale - NEW.quantita
ELSE giacenzainiziale
END),
-- valore rettifica
valgiacienzainiziale = (CASE NEW.valrettifica
WHEN '+' THEN valgiacienzainiziale + f_sconti(NEW.valore,NEW.sconto)
WHEN '-' THEN valgiacienzainiziale - f_sconti(NEW.valore,NEW.sconto)
ELSE valgiacienzainiziale
END)
WHERE esercizio = NEW.esercizio AND
azienda = NEW.azienda AND
articolo = NEW.articolo AND
deposito = NEW.deposito;
END IF;
RETURN NEW;
END;
$$;
CREATE TRIGGER saldiadd AFTER INSERT ON movimentimaga FOR EACH ROW EXECUTE PROCEDURE fn_saldiadd();
and going to traslate for sqlite, but not have any idea for proceed.