Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- use Illuminate\Database\Migrations\Migration;
- class InsumosTrigger extends Migration
- {
- /**
- * Run the migrations.
- *
- * @return void
- */
- public function up()
- {
- try {
- DB::unprepared("
- CREATE OR REPLACE TRIGGER insert_insumos BEFORE
- INSERT OR UPDATE ON agendamiento
- FOR EACH ROW
- DECLARE BEGIN
- IF
- inserting
- THEN
- INSERT ALL INTO insumo_agendamiento (
- indice,
- indice_agendamiento,
- master_insumo_indice,
- nombre,
- codigo,
- cantidad,
- costo,
- created_at,
- updated_at
- ) VALUES (
- insumo_agendamiento_indice_seq.NEXTVAL,
- :new.indice_agendamiento,
- master_insumo_indice,
- nombre,
- codigo,
- suma,
- costo,
- SYSDATE,
- SYSDATE
- ) INTO historial_tabla (
- fue_creado,
- nombre_modulo,
- aplicacion_indice,
- indice_tabla_modificada,
- nombre_tabla_modificada,
- estado_actual,
- created_at,
- updated_at
- ) VALUES (
- '1',
- 'Lista de trabajo',
- 1,
- :new.indice_agendamiento,
- 'insumo_agendamiento',
- estado_actual,
- SYSDATE,
- SYSDATE
- ) SELECT
- master_insumo_indice,
- nombre,
- codigo,
- CASE
- WHEN costo LIKE '%,%' THEN '0'
- ELSE costo
- END
- costo,
- suma,
- ( '{\"indice\":\"creado_triger_crear_ag\",\"cantidad\":\"'
- || suma
- || '\",\"costo\":\"'
- || costo
- || '\",\"nombre\":\"'
- || nombre
- || '\",\"codigo\":\"'
- || codigo
- || '\"}' ) AS estado_actual
- FROM
- (
- SELECT
- master_insumo_indice,
- nombre,
- codigo,
- rtrim(regexp_replace(
- LISTAGG(costo,',') WITHIN GROUP(
- ORDER BY
- master_insumo_indice DESC
- ),'([^,]*)(,\\1)+($|,)','\\1\\3'),',') costo,
- suma
- FROM
- (
- SELECT
- master_insumo_indice,
- nombre,
- codigo,
- costo,
- suma
- FROM
- (
- SELECT
- insumo_areas_centros.nombre,
- insumo_areas_centros.codigo,
- insumo_areas_centros.master_insumo_indice,
- insumo_ac_kit_insumo.costo,
- CASE
- WHEN SUM(insumo_ac_kit_insumo.cantidad) OVER(
- PARTITION BY insumo_areas_centros.master_insumo_indice
- ORDER BY
- insumo_areas_centros.master_insumo_indice
- ) > 10 THEN 10
- ELSE SUM(insumo_ac_kit_insumo.cantidad) OVER(
- PARTITION BY insumo_areas_centros.master_insumo_indice
- ORDER BY
- insumo_areas_centros.master_insumo_indice
- )
- END
- suma
- FROM
- kit_insumo_tipopro_ac
- INNER JOIN kit_insumo ON kit_insumo.indice = kit_insumo_tipopro_ac.kit_insumo_indice
- INNER JOIN insumo_ac_kit_insumo ON insumo_ac_kit_insumo.kit_insumo_indice = kit_insumo.indice
- INNER JOIN insumo_areas_centros ON insumo_areas_centros.indice = insumo_ac_kit_insumo.insumo_ac_indice
- WHERE
- kit_insumo_tipopro_ac.areas_centros_indice =:new.indice_area_centro
- AND tipoprocedimientos_indice = (
- SELECT
- tp.indice_tipoprocedimiento
- FROM
- tipoprocedimientos_area_centro tac
- INNER JOIN tipoprocedimientos tp ON ( tac.indice_tipoprocedimientos = tp.indice_tipoprocedimiento )
- WHERE
- tp.valor =:new.universal_serviceid_id
- AND tac.indice_area_centro =:new.indice_area_centro
- )
- AND insumo_areas_centros.activado = '1'
- ORDER BY
- insumo_areas_centros.nombre DESC
- )
- )
- GROUP BY
- nombre,
- codigo,
- master_insumo_indice,
- suma
- );
- ELSIF updating THEN
- IF
- :new.universal_serviceid_id <>:old.universal_serviceid_id
- THEN
- INSERT ALL INTO historial_tabla (
- fue_eliminado,
- nombre_modulo,
- aplicacion_indice,
- indice_tabla_modificada,
- nombre_tabla_modificada,
- estado_anterior,
- created_at,
- updated_at
- ) VALUES (
- '1',
- 'Lista de trabajo',
- 1,
- indice_agendamiento,
- 'insumo_agendamiento',
- estado_anterior,
- SYSDATE,
- SYSDATE
- ) SELECT
- :old.indice_agendamiento AS indice_agendamiento,
- ( '{\"indice\":'
- || indice
- || ',\"cantidad\":\"'
- || cantidad
- || '\",\"costo\":\"'
- || costo
- || '\",\"nombre\":\"'
- || nombre
- || '\",\"codigo\":\"'
- || codigo
- || '\"}' ) AS estado_anterior
- FROM
- insumo_agendamiento
- WHERE
- indice_agendamiento =:old.indice_agendamiento;
- DELETE FROM insumo_agendamiento
- WHERE
- indice_agendamiento =:old.indice_agendamiento;
- INSERT ALL INTO insumo_agendamiento (
- indice,
- indice_agendamiento,
- master_insumo_indice,
- nombre,
- codigo,
- cantidad,
- costo,
- created_at,
- updated_at
- ) VALUES (
- insumo_agendamiento_indice_seq.NEXTVAL,
- :new.indice_agendamiento,
- master_insumo_indice,
- nombre,
- codigo,
- suma,
- costo,
- SYSDATE,
- SYSDATE
- ) INTO historial_tabla (
- fue_creado,
- nombre_modulo,
- aplicacion_indice,
- indice_tabla_modificada,
- nombre_tabla_modificada,
- estado_actual,
- created_at,
- updated_at
- ) VALUES (
- '1',
- 'Lista de trabajo',
- 1,
- :new.indice_agendamiento,
- 'insumo_agendamiento',
- estado_actual,
- SYSDATE,
- SYSDATE
- ) SELECT
- master_insumo_indice,
- nombre,
- codigo,
- CASE
- WHEN costo LIKE '%,%' THEN '0'
- ELSE costo
- END
- costo,
- suma,
- ( '{\"indice\":\"crear_trigger_actualizar_ag\",\"cantidad\":\"'
- || suma
- || '\",\"costo\":\"'
- || costo
- || '\",\"nombre\":\"'
- || nombre
- || '\",\"codigo\":\"'
- || codigo
- || '\"}' ) AS estado_actual
- FROM
- (
- SELECT
- master_insumo_indice,
- nombre,
- codigo,
- rtrim(regexp_replace(
- LISTAGG(costo,',') WITHIN GROUP(
- ORDER BY
- master_insumo_indice DESC
- ),'([^,]*)(,\\1)+($|,)','\\1\\3'),',') costo,
- suma
- FROM
- (
- SELECT
- master_insumo_indice,
- nombre,
- codigo,
- costo,
- suma
- FROM
- (
- SELECT
- insumo_areas_centros.nombre,
- insumo_areas_centros.codigo,
- insumo_areas_centros.master_insumo_indice,
- insumo_ac_kit_insumo.costo,
- CASE
- WHEN SUM(insumo_ac_kit_insumo.cantidad) OVER(
- PARTITION BY insumo_areas_centros.master_insumo_indice
- ORDER BY
- insumo_areas_centros.master_insumo_indice
- ) > 10 THEN 10
- ELSE SUM(insumo_ac_kit_insumo.cantidad) OVER(
- PARTITION BY insumo_areas_centros.master_insumo_indice
- ORDER BY
- insumo_areas_centros.master_insumo_indice
- )
- END
- suma
- FROM
- kit_insumo_tipopro_ac
- INNER JOIN kit_insumo ON kit_insumo.indice = kit_insumo_tipopro_ac.kit_insumo_indice
- INNER JOIN insumo_ac_kit_insumo ON insumo_ac_kit_insumo.kit_insumo_indice = kit_insumo.indice
- INNER JOIN insumo_areas_centros ON insumo_areas_centros.indice = insumo_ac_kit_insumo.insumo_ac_indice
- WHERE
- kit_insumo_tipopro_ac.areas_centros_indice =:new.indice_area_centro
- AND tipoprocedimientos_indice = (
- SELECT
- tp.indice_tipoprocedimiento
- FROM
- tipoprocedimientos_area_centro tac
- INNER JOIN tipoprocedimientos tp ON ( tac.indice_tipoprocedimientos = tp.indice_tipoprocedimiento )
- WHERE
- tp.valor =:new.universal_serviceid_id
- AND tac.indice_area_centro =:new.indice_area_centro
- )
- AND insumo_areas_centros.activado = '1'
- ORDER BY
- insumo_areas_centros.nombre DESC
- )
- )
- GROUP BY
- nombre,
- codigo,
- master_insumo_indice,
- suma
- );
- END IF;
- END IF;
- END insert_insumos;");
- } catch (\Exception $e) {
- echo "Error no se ha compilado trigger de inserción de insumos, verificar en caso de requerirlo\n";
- }
- }
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- DB::statement("DROP TRIGGER insert_insumos");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement