Esempio n. 1
0
 /**
  * Marco de borrado el artículo y borro sus eventuales órdenes.
  * 
  * Cuando borramos un artículo cambiamos el código para poder reutilizarlo.
  * De forma que si el código era 043, ahora se llama deleted043,
  * y entonces podemos volver a dar de alta otro artículo con código 043. 
  * 
  * @return boolean
  */
 public function delete()
 {
     $ok = $this->validaBorrado();
     if ($ok) {
         $id = $this->IDArticulo;
         $this->setCodigo("deleted_{$this->IDArticulo}_{$this->Codigo}");
         $this->save();
         $ok = parent::delete();
         if ($ok) {
             // Borro los eventuales ordenes que existieran para el artículo
             $ordenes = new OrdenesArticulos();
             $ordenes->borraOrdenesArticulo($id);
             unset($ordenes);
             // Borro las eventuales propiedades
             $propiedades = new ArticulosPropiedades();
             $propiedades->queryDelete("IDArticulo='{$id}'");
             unset($propiedades);
             // Borro el eventual escandallo
             if ($this->AllowsChildren == '0') {
                 $escan = new ArticulosEscandallos();
                 $escan->queryDelete("IDArticuloOrigen='{$id}'");
                 unset($escan);
             }
         }
     }
     return $ok;
 }
 /**
  * Recalcular el escandallo y actualiza los precios
  * en el articulo padre (origen)
  * 
  * @param inter $idArticuloOrigen
  */
 private function recalcular($idArticuloOrigen)
 {
     $escan = new ArticulosEscandallos();
     $totales = $escan->cargaCondicion("sum(Unidades) as Unidades,sum(ImporteCosto) as Costo,sum(ImporteVenta) as Venta,sum(Peso) as Peso,sum(Volumen) as Volumen", "IDArticuloOrigen='{$idArticuloOrigen}' and IDArticuloDestino>0 GROUP BY IDArticuloOrigen");
     $totales = $totales[0];
     unset($escan);
     // Borrar la fila de totalización y volverla a crear
     $escan = new ArticulosEscandallos();
     $escan->queryDelete("IDArticuloOrigen='{$idArticuloOrigen}' and IDArticuloDestino='0'");
     $escan = new ArticulosEscandallos();
     $escan->setIDArticuloOrigen($idArticuloOrigen);
     $escan->setIDArticuloDestino(0);
     $escan->setUnidades($totales['Unidades']);
     $escan->setImporteCosto($totales['Costo']);
     $escan->setImporteVenta($totales['Venta']);
     $escan->setPeso($totales['Peso']);
     $escan->setVolumen($totales['Volumen']);
     $escan->create();
     unset($escan);
     // Actualizar el artículo padre
     // Leo el parametro 'ACTU_PRECIOS' para ver el comportamiento a seguir
     // en el cambio de precio de venta o margen. Si no estuviera definido,
     // se respeta el PVP a costa del MARGEN
     $parametro = $_SESSION['usuarioPortal']['actuPrecios'];
     if ($parametro != 'MARGEN' and $parametro != 'PVP') {
         $parametro = 'MARGEN';
     }
     $articulo = new Articulos($idArticuloOrigen);
     // Calculo el nuevo margen o el nuevo precio de venta (según el parámetro) sobre el PRECIO MEDIO DE COSTO
     $articulo->setPvd($totales['Costo']);
     $articulo->setPvp($totales['Venta']);
     if ($articulo->getPmc() == 0) {
         $articulo->setPmc($articulo->getPvd());
     }
     if ($articulo->getPmc() != 0) {
         $articulo->setMargen(100 * ($articulo->getPvp() / $articulo->getPmc() - 1));
     } else {
         $articulo->setMargen(0);
     }
     $articulo->setFechaUltimoPrecio(date('Y-m-d H:i:s'));
     $articulo->save();
     unset($articulo);
 }