/** * 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); }