Przeglądaj źródła

Arreglo de los exceles, nueva migracion para obra rubro con descuento

Jogibeda 5 miesięcy temu
rodzic
commit
1bd1099aea

+ 41 - 0
migrations/m241123_013948_Actualizar_Rubro.php

@@ -0,0 +1,41 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m241123_013948_Actualizar_Rubro
+ */
+class m241123_013948_Actualizar_Rubro extends Migration
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function safeUp()
+    {
+        $this->addColumn('ObraRubro', 'descuento', $this->decimal(10,2));
+
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function safeDown()
+    {
+        $this->dropColumn('ObraRubro', 'descuento');
+    }
+
+    /*
+    // Use up()/down() to run migration code without a transaction.
+    public function up()
+    {
+
+    }
+
+    public function down()
+    {
+        echo "m241123_013948_Actualizar_Rubro cannot be reverted.\n";
+
+        return false;
+    }
+    */
+}

+ 2 - 1
models/ObraRubro.php

@@ -34,7 +34,7 @@ class ObraRubro extends ModeloBase {
   public function rules() {
     return [
       [['id'], 'required'],
-      [['cantidad'], 'number'],
+      [['cantidad', 'descuento'], 'number'],
       [['fechaCompra', 'creado', 'modificado', 'eliminado'], 'safe'],
       [['id', 'idObra', 'idConceptoObra'], 'string', 'max' => 36],
       [['descripcion'], 'string', 'max' => 550],
@@ -54,6 +54,7 @@ class ObraRubro extends ModeloBase {
       'idConceptoObra' => 'Id Concepto Obra',
       'cantidad' => 'Cantidad',
       'descripcion' => 'Descripcion',
+      'descuento' => 'Descuento',
       'fechaCompra' => 'Fecha Compra',
       'creado' => 'Creado',
       'modificado' => 'Modificado',

+ 5 - 4
modules/excel/controllers/ObraController.php

@@ -243,8 +243,8 @@ class ObraController extends Controller
     $totalNomina = $totalesController->actionTotalNomina($idObra);
     $totalRubro = $totalesController->actionTotalRubro($idObra);
     $saldo = $totalesController->actionSaldo($totalGasto, $totalNomina, $totalPago);
-    $ejercidoObra = $totalesController->actionEjercidoObra($totalGasto, $totalRubro);
-    $ejercer = $totalesController->actionEjercer($totalRubro, $totalPago);
+    $ejercer = $totalesController->actionEjercer($totalGasto,$totalNomina,$totalRubro );
+    $ejercidoObra = $totalesController->actionEjercidoObra($ejercer, $totalRubro);
 
     $startRowTotales = max($rEmpleado, $rHerramienta) + 2;
 
@@ -321,9 +321,8 @@ class ObraController extends Controller
         "estiloCondicional" => $estiloCondicional,
       ],
       "F{$datos}" => [
-        "valor" => $ejercidoObra,
+        "valor" => "$ejercidoObra%",
         "estilo" => $estiloCeldaIzquierda,
-        "formato" => "#,##0.00%",
         "estiloCondicional" => $estiloCondicional,
       ],
       "G{$datos}" => [
@@ -633,6 +632,8 @@ class ObraController extends Controller
     $this->anchoColumnas($anchoColumnas);
 
 
+    $spreadsheet= new Spreadsheet;
+    $this->activeSheet = $this->spreadsheet->getActiveSheet(0);
 
     $documento = $this->obtenerHojaDeCalculo();
     $this->crear($documento,  "Obra_" . date("YmdHis"), self::TIPO_EXCEL);

+ 21 - 9
modules/v1/controllers/ObraController.php

@@ -205,15 +205,21 @@ class ObraController extends AuthController {
 public function actionTotalRubro($id){
   try {
   $TotalRubro= 0;
-  $q=(new Query())->select(['{{ObraRubro}}.[[cantidad]]'])
+  $q=(new Query())->select(['{{ObraRubro}}.[[cantidad]]', '{{ObraRubro}}.[[descuento]]'])
   ->from('ObraRubro') 
   ->rightJoin('Obra', '{{Obra}}.[[id]] = {{ObraRubro}}.[[idObra]]') 
   ->andWhere(['{{ObraRubro}}.[[idObra]]' => $id]) 
   ->andWhere(['{{ObraRubro}}.[[eliminado]]'=>null])
-  ->column();
-  foreach($q as $cantidad){
-    $TotalRubro=$TotalRubro+$cantidad;
-  }
+  ->all();
+  foreach ($q as $rubro) {
+    $cantidad = $rubro['cantidad'];
+    $descuento = $rubro['descuento'] ?? 0; 
+
+    $cantidadConDescuento = $cantidad * (1 - $descuento / 100);
+
+    // Suma al total
+    $TotalRubro += $cantidadConDescuento;
+}
   return $TotalRubro;
 } catch (\Exception $e) {
   Yii::error("Error en actionRubro: " . $e->getMessage());
@@ -233,9 +239,15 @@ public function actionSaldo($gasto, $nomina, $pago){
  } 
 }
 
-public function actionEjercidoObra($gasto, $rubro){
+public function actionEjercidoObra($ejercer, $rubro){
   try{
-    $TotalEjercido = ($rubro != 0) ? ($gasto * 100) / $rubro : 0;
+    if (($ejercer - $rubro) != 0) {
+      $TotalEjercido = ($rubro / ($ejercer - $rubro)) * 100;
+      $TotalEjercido = round($TotalEjercido, 2);
+
+  } else {
+      $TotalEjercido = 0; // Evita dividir por cero
+  }
 
    return $TotalEjercido; 
  
@@ -244,9 +256,9 @@ public function actionEjercidoObra($gasto, $rubro){
    return ['error' => 'Error al calcular el Ejercido. Verifique el log para más detalles.'];
   } 
  }
- public function actionEjercer($rubro, $pago){
+ public function actionEjercer($gasto, $nomina, $rubro){
   try{
-   $TotalEjercer=$rubro-$pago;
+   $TotalEjercer=($gasto+$nomina)-$rubro;
    return $TotalEjercer; 
  
   }catch(\Exception $e){

+ 28 - 0
modules/v1/controllers/ObraEmpleadoController.php

@@ -31,6 +31,34 @@ class ObraEmpleadoController extends AuthController {
 
     return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
   }
+  public function actionGuardar()
+  {
+    $id = trim($this->req->getBodyParam("id", ""));
+    $modelo = null;
+
+    if ($id !== "") {
+      $modelo = $this->modelClass::findOne($id);
+    }
+    if ($modelo === null) {
+      $modelo = new $this->modelClass();
+      $modelo->uuid();
+      $modelo->creado = new Expression('now()');
+    } else {
+      $modelo->modificado = new Expression('now()');
+    }
+    $modelo->load($this->req->getBodyParams(), '');
+
+   
+    $modelo->load($this->req->getBodyParams(), '');
+    if (!$modelo->save()) {
+      return (new Respuesta($modelo))
+        ->mensaje("Hubo un problema al guardar el Gasto");
+    }
+
+    $modelo->refresh();
+    return (new Respuesta($modelo))
+      ->mensaje("Gasto guardado");
+  }
 
   public function actionEliminar() {
     $id = trim($this->req->getBodyParam("id", ""));

+ 0 - 1
modules/v1/controllers/ObraRubroController.php

@@ -16,7 +16,6 @@ class ObraRubroController extends AuthController {
 		$idObra=trim($this->req->get("idObra",""));
 
 		$query = $this->queryInicial;
-		$query->joinWith("conceptoObra");
 		if ($id !== "") {
 			$query->andWhere(["id" => $id]);
 		}

+ 1 - 0
modules/v1/models/ObraRubro.php

@@ -12,6 +12,7 @@ class ObraRubro extends ModeloObraRubro {
 			'idObra',
 			'idConceptoObra',
 			'cantidad',
+			'descuento',
 			'descripcion',
 			'fechaCompra',
 			'creado',