ObraController.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?php
  2. namespace v1\controllers;
  3. use app\models\ObraEmpleado;
  4. use app\models\ObraHerramienta;
  5. use common\data\Respuesta;
  6. use common\rest\AuthController;
  7. use Mpdf\Tag\Select;
  8. use Yii;
  9. use yii\db\Expression;
  10. use yii\db\Query;
  11. class ObraController extends AuthController {
  12. public $modelClass = "v1\models\Obra";
  13. public function actionIndex() {
  14. $id = trim($this->req->get("id", ""));
  15. $buscar = trim($this->req->get("q", ""));
  16. $inicio = trim($this->req->get("inicio", ""));
  17. $fin = trim($this->req->get("fin", ""));
  18. $query = $this->queryInicial;
  19. if ($id!=="") {
  20. $query->andWhere(["id" => $id]);
  21. }
  22. if ($inicio !== "" && $fin !== "") {
  23. $query->andWhere([">=", "[[fechaInicio]]", $inicio])
  24. ->andWhere(["<=", "[[fechaFinal]]", $fin]);
  25. }
  26. if ($buscar) {
  27. $query->andWhere([
  28. "OR",
  29. ["ilike", "nombre", $buscar]
  30. ]);
  31. }
  32. return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
  33. }
  34. public function actionGuardar() {
  35. $id = trim($this->req->getBodyParam("id", ""));
  36. $herramientas = $this->req->getBodyParam("herramientas", []);
  37. $empleados = $this->req->getBodyParam("empleados", []);
  38. $modelo = null;
  39. $transaccion = \Yii::$app->db->beginTransaction();
  40. try {
  41. if ($id !== "") {
  42. $modelo = $this->modelClass::findOne($id);
  43. }
  44. if ($modelo === null) {
  45. $modelo = new $this->modelClass();
  46. $modelo->uuid();
  47. $modelo->creado = new Expression('now()');
  48. } else {
  49. $modelo->modificado = new Expression('now()');
  50. }
  51. $modelo->load($this->req->getBodyParams(), '');
  52. $clave = $modelo->clave;
  53. $existeClave = $this->modelClass::find()->andwhere(['clave' => $clave])->andWhere(['<>', 'id', $id])->andWhere(['eliminado'=>null])->exists();
  54. if ($existeClave) {
  55. return (new Respuesta())
  56. ->esError()
  57. ->mensaje("La clave '$clave' ya existe. Por favor, ingresa una clave diferente.");
  58. }
  59. $modelo->load($this->req->getBodyParams(), '');
  60. if (!$modelo->save()) {
  61. return (new Respuesta($modelo))
  62. ->mensaje("Hubo un problema al guardar la obra");
  63. }
  64. ObraEmpleado::deleteAll(['idObra' => $modelo->id]);
  65. foreach ($empleados as $empleado) {
  66. if (isset($empleado['id']) ) {
  67. $obraEmpleado = new ObraEmpleado();
  68. $obraEmpleado->uuid();
  69. $obraEmpleado->idEmpleado = $empleado['id'];
  70. $obraEmpleado->idObra = $modelo->id;
  71. if (!$obraEmpleado->save()) {
  72. $transaccion->rollBack();
  73. return (new Respuesta($obraEmpleado))
  74. ->mensaje("Hubo un problema al guardar el Empleado con ID {$empleado['id']}");
  75. }
  76. } else {
  77. Yii::error('Falta el id del empleado o está vacío en el array', ['item' => $empleado]);
  78. }
  79. }
  80. ObraHerramienta::deleteAll(['idObra' => $modelo->id]);
  81. foreach ($herramientas as $herramienta) {
  82. if (isset($herramienta['id']) && isset($herramienta['cantidad'])) {
  83. $obraHerramienta = new ObraHerramienta();
  84. $obraHerramienta->uuid();
  85. $obraHerramienta->idHerramienta = $herramienta['id'];
  86. $obraHerramienta->idObra = $modelo->id;
  87. $obraHerramienta->cantidad = $herramienta['cantidad'];
  88. if (!$obraHerramienta->save()) {
  89. $transaccion->rollBack();
  90. return (new Respuesta($obraHerramienta))
  91. ->mensaje("Hubo un problema al guardar la Herramienta con ID {$herramienta['id']}");
  92. }
  93. } else {
  94. Yii::error('Faltan datos en el array de herramientas', ['item' => $herramienta]);
  95. }
  96. }
  97. $transaccion->commit();
  98. $modelo->refresh();
  99. return (new Respuesta($modelo))
  100. ->mensaje("Obra ha sido guardado de manera exitosa");
  101. } catch (\Exception $e) {
  102. $transaccion->rollBack();
  103. return (new Respuesta($modelo))
  104. ->esError()
  105. ->mensaje($e->getMessage());
  106. }
  107. }
  108. public function actionEliminar() {
  109. $id = trim($this->req->getBodyParam("id", ""));
  110. $modelo = null;
  111. if ($id !== "") {
  112. $modelo = $this->modelClass::findOne(["id" => $id]);
  113. }
  114. if ($modelo === null) {
  115. return (new Respuesta())
  116. ->esError()
  117. ->mensaje("Obra no encontrada");
  118. }
  119. $modelo->eliminado = new Expression('now()');
  120. if (!$modelo->save()) {
  121. return (new Respuesta($modelo))
  122. ->mensaje("No se pudo eliminar la obra");
  123. }
  124. return (new Respuesta())
  125. ->mensaje("Obra eliminada");
  126. }
  127. public function actionTotalGasto($id){
  128. $TotalGasto=0;
  129. $q=(new Query())->select(['{{Gasto}}.[[cantidad]]'])
  130. ->from('Gasto')
  131. ->innerJoin('Obra', '{{Obra}}.[[id]] = {{Gasto}}.[[idObra]]')
  132. ->andWhere(['{{Gasto}}.[[idObra]]' => $id])
  133. ->andWhere(['{{Gasto}}.[[eliminado]]'=>null])
  134. ->column();
  135. foreach($q as $cantidad){
  136. $TotalGasto=$TotalGasto+$cantidad;
  137. }
  138. return $TotalGasto;
  139. }
  140. public function actionTotalPago($id){
  141. $TotalPago= 0;
  142. $q=(new Query())->select(['{{Pago}}.[[cantidad]]'])
  143. ->from('Pago')
  144. ->innerJoin('Obra', '{{Obra}}.[[id]] = {{Pago}}.[[idObra]]')
  145. ->andWhere(['{{Pago}}.[[idObra]]' => $id])
  146. ->andWhere(['{{Pago}}.[[eliminado]]'=>null])
  147. ->column();
  148. foreach($q as $cantidad){
  149. $TotalPago=$TotalPago+$cantidad;
  150. }
  151. return $TotalPago;
  152. }
  153. public function actionTotalNomina($id){
  154. try {
  155. $TotalNomina= 0;
  156. $NominaDescuento=0;
  157. $q=(new Query())->select(['{{Nomina}}.[[montoPagado]]','{{Nomina}}.[[descuento]]'])
  158. ->from('Nomina')
  159. ->innerJoin('Obra', '{{Obra}}.[[id]] = {{Nomina}}.[[idObra]]')
  160. ->andWhere(['{{Nomina}}.[[idObra]]' => $id])
  161. ->andWhere(['{{Nomina}}.[[eliminado]]'=>null])
  162. ->all();
  163. foreach($q as $cantidad){
  164. $montoPagado= $cantidad['montoPagado'];
  165. $descuento= $cantidad['descuento'];
  166. $NominaDescuento= $montoPagado-($montoPagado*($descuento/100));
  167. $TotalNomina=$TotalNomina+$NominaDescuento;
  168. }
  169. return $TotalNomina;
  170. } catch (\Exception $e) {
  171. Yii::error("Error en actionTotalNomina: " . $e->getMessage());
  172. return ['error' => 'Error al calcular la nómina. Verifique el log para más detalles.'];
  173. }
  174. }
  175. }