CREATE OR REPLACE FUNCTION food600.karty_rozpatie()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE mcdruhk INTEGER;
	mrozp NUMERIC(8,2) DEFAULT 0;
	mrozp_ciel NUMERIC(8,2) DEFAULT 0;
	mhladina SMALLINT;
	nakup NUMERIC(12,4);
	sadzba NUMERIC(5,2);
	cdata SMALLINT;
	oldcena NUMERIC(12,2);
	newcena NUMERIC(12,2);
	typ SMALLINT DEFAULT 0;
	midriadok INTEGER;
BEGIN
IF (TG_OP = 'DELETE')THEN
	DELETE FROM food600.kceny WHERE c_karty=OLD.c_karty AND c_data=OLD.c_data;
	DELETE FROM food600.rozpatia WHERE c_karty=OLD.c_karty AND c_data=OLD.c_data;		
	RETURN OLD;
END IF;
IF (TG_OP = 'INSERT')THEN
	RETURN NEW;
ELSE 
	IF NEW.c_druhk>0 THEN
		cdata:=NEW.c_data;
		IF cdata=0 OR cdata IS NULL THEN
			cdata:=1;
		END IF;
		mhladina:=0;
		WHILE mhladina<40 LOOP
			mhladina:=mhladina+1;
			CASE mhladina
				WHEN 1 THEN oldcena:=OLD.cena01;
							newcena:=NEW.cena01;
				WHEN 2 THEN oldcena:=OLD.cena02;
							newcena:=NEW.cena02;
				WHEN 3 THEN oldcena:=OLD.cena03;
							newcena:=NEW.cena03;
				WHEN 4 THEN oldcena:=OLD.cena04;
							newcena:=NEW.cena04;
				WHEN 5 THEN oldcena:=OLD.cena05;
							newcena:=NEW.cena05;
				WHEN 6 THEN oldcena:=OLD.cena06;
							newcena:=NEW.cena06;
				WHEN 7 THEN oldcena:=OLD.cena07;
							newcena:=NEW.cena07;
				WHEN 8 THEN oldcena:=OLD.cena08;
							newcena:=NEW.cena08;
				WHEN 9 THEN oldcena:=OLD.cena09;
							newcena:=NEW.cena09;
				WHEN 10 THEN oldcena:=OLD.cena10;
							newcena:=NEW.cena10;
				WHEN 11 THEN oldcena:=OLD.cena11;
							newcena:=NEW.cena11;
				WHEN 12 THEN oldcena:=OLD.cena12;
							newcena:=NEW.cena12;
				WHEN 13 THEN oldcena:=OLD.cena13;
							newcena:=NEW.cena13;
				WHEN 14 THEN oldcena:=OLD.cena14;
							newcena:=NEW.cena14;
				WHEN 15 THEN oldcena:=OLD.cena15;
							newcena:=NEW.cena15;
				WHEN 16 THEN oldcena:=OLD.cena16;
							newcena:=NEW.cena16;
				WHEN 17 THEN oldcena:=OLD.cena17;
							newcena:=NEW.cena17;
				WHEN 18 THEN oldcena:=OLD.cena18;
							newcena:=NEW.cena18;
				WHEN 19 THEN oldcena:=OLD.cena19;
							newcena:=NEW.cena19;
				WHEN 20 THEN oldcena:=OLD.cena20;
							newcena:=NEW.cena20;
				WHEN 21 THEN oldcena:=OLD.cena21;
							newcena:=NEW.cena21;
				WHEN 22 THEN oldcena:=OLD.cena22;
							newcena:=NEW.cena22;
				WHEN 23 THEN oldcena:=OLD.cena23;
							newcena:=NEW.cena23;
				WHEN 24 THEN oldcena:=OLD.cena24;
							newcena:=NEW.cena24;
				WHEN 25 THEN oldcena:=OLD.cena25;
							newcena:=NEW.cena25;
				WHEN 26 THEN oldcena:=OLD.cena26;
							newcena:=NEW.cena26;
				WHEN 27 THEN oldcena:=OLD.cena27;
							newcena:=NEW.cena27;
				WHEN 28 THEN oldcena:=OLD.cena28;
							newcena:=NEW.cena28;
				WHEN 29 THEN oldcena:=OLD.cena29;
							newcena:=NEW.cena29;
				WHEN 30 THEN oldcena:=OLD.cena30;
							newcena:=NEW.cena30;
				WHEN 31 THEN oldcena:=OLD.cena31;
							newcena:=NEW.cena31;
				WHEN 32 THEN oldcena:=OLD.cena32;
							newcena:=NEW.cena32;
				WHEN 33 THEN oldcena:=OLD.cena33;
							newcena:=NEW.cena33;
				WHEN 34 THEN oldcena:=OLD.cena34;
							newcena:=NEW.cena34;
				WHEN 35 THEN oldcena:=OLD.cena35;
							newcena:=NEW.cena35;
				WHEN 36 THEN oldcena:=OLD.cena36;
							newcena:=NEW.cena36;
				WHEN 37 THEN oldcena:=OLD.cena37;
							newcena:=NEW.cena37;
				WHEN 38 THEN oldcena:=OLD.cena38;
							newcena:=NEW.cena38;
				WHEN 39 THEN oldcena:=OLD.cena39;
							newcena:=NEW.cena39;
				WHEN 40 THEN oldcena:=OLD.cena40;
							newcena:=NEW.cena40;
			END CASE;
			IF oldcena<>newcena OR NEW.cena_prum<>OLD.cena_prum THEN 
				IF newcena=0 THEN
					DELETE FROM food600.rozpatia WHERE c_karty=NEW.c_karty AND hladina=mhladina AND c_data=cdata;				
				ELSE
					SELECT CASE mhladina WHEN 1 THEN dan01
						WHEN 2 THEN dan02
						WHEN 3 THEN dan03
						WHEN 4 THEN dan04
						WHEN 5 THEN dan05
						WHEN 6 THEN dan06
						WHEN 7 THEN dan07
						WHEN 8 THEN dan08
						WHEN 9 THEN dan09
						WHEN 10 THEN dan10
						WHEN 11 THEN dan11
						WHEN 12 THEN dan12
						WHEN 13 THEN dan13
						WHEN 14 THEN dan14
						WHEN 15 THEN dan15
						WHEN 16 THEN dan16
						WHEN 17 THEN dan17
						WHEN 18 THEN dan18
						WHEN 19 THEN dan19
						WHEN 20 THEN dan20
						WHEN 21 THEN dan21
						WHEN 22 THEN dan22
						WHEN 23 THEN dan23
						WHEN 24 THEN dan24
						WHEN 25 THEN dan25
						WHEN 26 THEN dan26
						WHEN 27 THEN dan27
						WHEN 28 THEN dan28
						WHEN 29 THEN dan29
						WHEN 30 THEN dan30
						WHEN 31 THEN dan31
						WHEN 32 THEN dan32
						WHEN 33 THEN dan33
						WHEN 34 THEN dan34
						WHEN 35 THEN dan35
						WHEN 36 THEN dan36
						WHEN 37 THEN dan37
						WHEN 38 THEN dan38
						WHEN 39 THEN dan39
						WHEN 40 THEN dan40
						END
						INTO sadzba FROM food600.skupiny WHERE c_druh=NEW.c_druhk AND c_data=cdata;
					SELECT CASE mhladina WHEN 1 THEN rozp01
						WHEN 2 THEN rozp02
						WHEN 3 THEN rozp03
						WHEN 4 THEN rozp04
						WHEN 5 THEN rozp05
						WHEN 6 THEN rozp06
						WHEN 7 THEN rozp07
						WHEN 8 THEN rozp08
						WHEN 9 THEN rozp09
						WHEN 10 THEN rozp10
						WHEN 11 THEN rozp11
						WHEN 12 THEN rozp12
						WHEN 13 THEN rozp13
						WHEN 14 THEN rozp14
						WHEN 15 THEN rozp15
						WHEN 16 THEN rozp16
						WHEN 17 THEN rozp17
						WHEN 18 THEN rozp18
						WHEN 19 THEN rozp19
						WHEN 20 THEN rozp20
						WHEN 21 THEN rozp21
						WHEN 22 THEN rozp22
						WHEN 23 THEN rozp23
						WHEN 24 THEN rozp24
						WHEN 25 THEN rozp25
						WHEN 26 THEN rozp26
						WHEN 27 THEN rozp27
						WHEN 28 THEN rozp28
						WHEN 29 THEN rozp29
						WHEN 30 THEN rozp30
						WHEN 31 THEN rozp31
						WHEN 32 THEN rozp32
						WHEN 33 THEN rozp33
						WHEN 34 THEN rozp34
						WHEN 35 THEN rozp35
						WHEN 36 THEN rozp36
						WHEN 37 THEN rozp37
						WHEN 38 THEN rozp38
						WHEN 39 THEN rozp39
						WHEN 40 THEN rozp40
						END
						INTO mrozp_ciel FROM food600.skupinyrozpatia WHERE c_druh=NEW.c_druhk AND c_data=cdata;
					IF mrozp_ciel IS NOT NULL AND mrozp_ciel>0 THEN
						IF sadzba=0 THEN
							sadzba:=1;
						END IF;
						IF typ=0 THEN
							IF food600.dajvarnamelogical('FOOD_SET','','is_spanne')=1 THEN
								typ:=3;
							ELSE
								IF food600.dajvarnamelogical('FOOD_SET','','isfoodcost')=1 THEN
									typ:=2;
								ELSE							
									typ:=1;
								END IF;
							END IF;
						END IF;
						mrozp:=food600.spocitajrozpatie(newcena, sadzba, new.cena_prum, typ);
						IF mrozp<mrozp_ciel THEN
							SELECT idriadok INTO midriadok FROM food600.rozpatia WHERE c_karty=new.c_karty AND hladina=mhladina AND c_data=cdata;
							IF midriadok  IS NULL THEN
								INSERT INTO food600.rozpatia (c_karty, hladina, rozp, rozp_ciel, c_data) VALUES (new.c_karty, mhladina, mrozp, mrozp_ciel, cdata);
							ELSE
								UPDATE food600.rozpatia SET rozp=mrozp, rozp_ciel=mrozp_ciel WHERE rozpatia.c_karty=NEW.c_karty AND rozpatia.hladina=mhladina AND rozpatia.c_data=cdata;
							END IF;
						ELSE
							DELETE FROM food600.rozpatia WHERE c_karty=NEW.c_karty AND hladina=mhladina AND c_data=cdata;				
						END IF;
					ELSE
						DELETE FROM food600.rozpatia WHERE c_karty=NEW.c_karty AND hladina=mhladina AND c_data=cdata;				
					END IF;
				END IF;
			END IF;
		END LOOP;
	ELSE
		DELETE FROM food600.rozpatia WHERE c_karty=NEW.c_karty AND c_data=cdata;
	END IF;
	RETURN NEW;
END IF;
END
$BODY$;
