Advertisement
Guest User

Untitled

a guest
Apr 19th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.21 KB | None | 0 0
  1. <?php
  2.  
  3. use Illuminate\Database\Migrations\Migration;
  4.  
  5. class InsumosTrigger extends Migration
  6. {
  7. /**
  8. * Run the migrations.
  9. *
  10. * @return void
  11. */
  12. public function up()
  13. {
  14. try {
  15.  
  16. DB::unprepared("
  17. CREATE OR REPLACE TRIGGER insert_insumos BEFORE
  18. INSERT OR UPDATE ON agendamiento
  19. FOR EACH ROW
  20. DECLARE BEGIN
  21. IF
  22. inserting
  23. THEN
  24. INSERT ALL INTO insumo_agendamiento (
  25. indice,
  26. indice_agendamiento,
  27. master_insumo_indice,
  28. nombre,
  29. codigo,
  30. cantidad,
  31. costo,
  32. created_at,
  33. updated_at
  34. ) VALUES (
  35. insumo_agendamiento_indice_seq.NEXTVAL,
  36. :new.indice_agendamiento,
  37. master_insumo_indice,
  38. nombre,
  39. codigo,
  40. suma,
  41. costo,
  42. SYSDATE,
  43. SYSDATE
  44. ) INTO historial_tabla (
  45. fue_creado,
  46. nombre_modulo,
  47. aplicacion_indice,
  48. indice_tabla_modificada,
  49. nombre_tabla_modificada,
  50. estado_actual,
  51. created_at,
  52. updated_at
  53. ) VALUES (
  54. '1',
  55. 'Lista de trabajo',
  56. 1,
  57. :new.indice_agendamiento,
  58. 'insumo_agendamiento',
  59. estado_actual,
  60. SYSDATE,
  61. SYSDATE
  62. ) SELECT
  63. master_insumo_indice,
  64. nombre,
  65. codigo,
  66. CASE
  67. WHEN costo LIKE '%,%' THEN '0'
  68. ELSE costo
  69. END
  70. costo,
  71. suma,
  72. ( '{\"indice\":\"creado_triger_crear_ag\",\"cantidad\":\"'
  73. || suma
  74. || '\",\"costo\":\"'
  75. || costo
  76. || '\",\"nombre\":\"'
  77. || nombre
  78. || '\",\"codigo\":\"'
  79. || codigo
  80. || '\"}' ) AS estado_actual
  81. FROM
  82. (
  83. SELECT
  84. master_insumo_indice,
  85. nombre,
  86. codigo,
  87. rtrim(regexp_replace(
  88. LISTAGG(costo,',') WITHIN GROUP(
  89. ORDER BY
  90. master_insumo_indice DESC
  91. ),'([^,]*)(,\\1)+($|,)','\\1\\3'),',') costo,
  92. suma
  93. FROM
  94. (
  95. SELECT
  96. master_insumo_indice,
  97. nombre,
  98. codigo,
  99. costo,
  100. suma
  101. FROM
  102. (
  103. SELECT
  104. insumo_areas_centros.nombre,
  105. insumo_areas_centros.codigo,
  106. insumo_areas_centros.master_insumo_indice,
  107. insumo_ac_kit_insumo.costo,
  108. CASE
  109. WHEN SUM(insumo_ac_kit_insumo.cantidad) OVER(
  110. PARTITION BY insumo_areas_centros.master_insumo_indice
  111. ORDER BY
  112. insumo_areas_centros.master_insumo_indice
  113. ) > 10 THEN 10
  114. ELSE SUM(insumo_ac_kit_insumo.cantidad) OVER(
  115. PARTITION BY insumo_areas_centros.master_insumo_indice
  116. ORDER BY
  117. insumo_areas_centros.master_insumo_indice
  118. )
  119. END
  120. suma
  121. FROM
  122. kit_insumo_tipopro_ac
  123. INNER JOIN kit_insumo ON kit_insumo.indice = kit_insumo_tipopro_ac.kit_insumo_indice
  124. INNER JOIN insumo_ac_kit_insumo ON insumo_ac_kit_insumo.kit_insumo_indice = kit_insumo.indice
  125. INNER JOIN insumo_areas_centros ON insumo_areas_centros.indice = insumo_ac_kit_insumo.insumo_ac_indice
  126. WHERE
  127. kit_insumo_tipopro_ac.areas_centros_indice =:new.indice_area_centro
  128. AND tipoprocedimientos_indice = (
  129. SELECT
  130. tp.indice_tipoprocedimiento
  131. FROM
  132. tipoprocedimientos_area_centro tac
  133. INNER JOIN tipoprocedimientos tp ON ( tac.indice_tipoprocedimientos = tp.indice_tipoprocedimiento )
  134. WHERE
  135. tp.valor =:new.universal_serviceid_id
  136. AND tac.indice_area_centro =:new.indice_area_centro
  137. )
  138. AND insumo_areas_centros.activado = '1'
  139. ORDER BY
  140. insumo_areas_centros.nombre DESC
  141. )
  142. )
  143. GROUP BY
  144. nombre,
  145. codigo,
  146. master_insumo_indice,
  147. suma
  148. );
  149.  
  150. ELSIF updating THEN
  151. IF
  152. :new.universal_serviceid_id <>:old.universal_serviceid_id
  153. THEN
  154. INSERT ALL INTO historial_tabla (
  155. fue_eliminado,
  156. nombre_modulo,
  157. aplicacion_indice,
  158. indice_tabla_modificada,
  159. nombre_tabla_modificada,
  160. estado_anterior,
  161. created_at,
  162. updated_at
  163. ) VALUES (
  164. '1',
  165. 'Lista de trabajo',
  166. 1,
  167. indice_agendamiento,
  168. 'insumo_agendamiento',
  169. estado_anterior,
  170. SYSDATE,
  171. SYSDATE
  172. ) SELECT
  173. :old.indice_agendamiento AS indice_agendamiento,
  174. ( '{\"indice\":'
  175. || indice
  176. || ',\"cantidad\":\"'
  177. || cantidad
  178. || '\",\"costo\":\"'
  179. || costo
  180. || '\",\"nombre\":\"'
  181. || nombre
  182. || '\",\"codigo\":\"'
  183. || codigo
  184. || '\"}' ) AS estado_anterior
  185. FROM
  186. insumo_agendamiento
  187. WHERE
  188. indice_agendamiento =:old.indice_agendamiento;
  189.  
  190. DELETE FROM insumo_agendamiento
  191. WHERE
  192. indice_agendamiento =:old.indice_agendamiento;
  193.  
  194. INSERT ALL INTO insumo_agendamiento (
  195. indice,
  196. indice_agendamiento,
  197. master_insumo_indice,
  198. nombre,
  199. codigo,
  200. cantidad,
  201. costo,
  202. created_at,
  203. updated_at
  204. ) VALUES (
  205. insumo_agendamiento_indice_seq.NEXTVAL,
  206. :new.indice_agendamiento,
  207. master_insumo_indice,
  208. nombre,
  209. codigo,
  210. suma,
  211. costo,
  212. SYSDATE,
  213. SYSDATE
  214. ) INTO historial_tabla (
  215. fue_creado,
  216. nombre_modulo,
  217. aplicacion_indice,
  218. indice_tabla_modificada,
  219. nombre_tabla_modificada,
  220. estado_actual,
  221. created_at,
  222. updated_at
  223. ) VALUES (
  224. '1',
  225. 'Lista de trabajo',
  226. 1,
  227. :new.indice_agendamiento,
  228. 'insumo_agendamiento',
  229. estado_actual,
  230. SYSDATE,
  231. SYSDATE
  232. ) SELECT
  233. master_insumo_indice,
  234. nombre,
  235. codigo,
  236. CASE
  237. WHEN costo LIKE '%,%' THEN '0'
  238. ELSE costo
  239. END
  240. costo,
  241. suma,
  242. ( '{\"indice\":\"crear_trigger_actualizar_ag\",\"cantidad\":\"'
  243. || suma
  244. || '\",\"costo\":\"'
  245. || costo
  246. || '\",\"nombre\":\"'
  247. || nombre
  248. || '\",\"codigo\":\"'
  249. || codigo
  250. || '\"}' ) AS estado_actual
  251. FROM
  252. (
  253. SELECT
  254. master_insumo_indice,
  255. nombre,
  256. codigo,
  257. rtrim(regexp_replace(
  258. LISTAGG(costo,',') WITHIN GROUP(
  259. ORDER BY
  260. master_insumo_indice DESC
  261. ),'([^,]*)(,\\1)+($|,)','\\1\\3'),',') costo,
  262. suma
  263. FROM
  264. (
  265. SELECT
  266. master_insumo_indice,
  267. nombre,
  268. codigo,
  269. costo,
  270. suma
  271. FROM
  272. (
  273. SELECT
  274. insumo_areas_centros.nombre,
  275. insumo_areas_centros.codigo,
  276. insumo_areas_centros.master_insumo_indice,
  277. insumo_ac_kit_insumo.costo,
  278. CASE
  279. WHEN SUM(insumo_ac_kit_insumo.cantidad) OVER(
  280. PARTITION BY insumo_areas_centros.master_insumo_indice
  281. ORDER BY
  282. insumo_areas_centros.master_insumo_indice
  283. ) > 10 THEN 10
  284. ELSE SUM(insumo_ac_kit_insumo.cantidad) OVER(
  285. PARTITION BY insumo_areas_centros.master_insumo_indice
  286. ORDER BY
  287. insumo_areas_centros.master_insumo_indice
  288. )
  289. END
  290. suma
  291. FROM
  292. kit_insumo_tipopro_ac
  293. INNER JOIN kit_insumo ON kit_insumo.indice = kit_insumo_tipopro_ac.kit_insumo_indice
  294. INNER JOIN insumo_ac_kit_insumo ON insumo_ac_kit_insumo.kit_insumo_indice = kit_insumo.indice
  295. INNER JOIN insumo_areas_centros ON insumo_areas_centros.indice = insumo_ac_kit_insumo.insumo_ac_indice
  296. WHERE
  297. kit_insumo_tipopro_ac.areas_centros_indice =:new.indice_area_centro
  298. AND tipoprocedimientos_indice = (
  299. SELECT
  300. tp.indice_tipoprocedimiento
  301. FROM
  302. tipoprocedimientos_area_centro tac
  303. INNER JOIN tipoprocedimientos tp ON ( tac.indice_tipoprocedimientos = tp.indice_tipoprocedimiento )
  304. WHERE
  305. tp.valor =:new.universal_serviceid_id
  306. AND tac.indice_area_centro =:new.indice_area_centro
  307. )
  308. AND insumo_areas_centros.activado = '1'
  309. ORDER BY
  310. insumo_areas_centros.nombre DESC
  311. )
  312. )
  313. GROUP BY
  314. nombre,
  315. codigo,
  316. master_insumo_indice,
  317. suma
  318. );
  319.  
  320. END IF;
  321. END IF;
  322. END insert_insumos;");
  323. } catch (\Exception $e) {
  324. echo "Error no se ha compilado trigger de inserción de insumos, verificar en caso de requerirlo\n";
  325. }
  326.  
  327. }
  328.  
  329. /**
  330. * Reverse the migrations.
  331. *
  332. * @return void
  333. */
  334. public function down()
  335. {
  336. DB::statement("DROP TRIGGER insert_insumos");
  337. }
  338. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement