/**
  * Importa artículos desde fichero externo csv según
  * el formato de facturaplus
  * 
  * NOTA IMPORTANTE: SE HAN DE IMPORTAR LAS FAMILIAS ANTES.
  */
 public function ImportarAction()
 {
     $fileName = "docs/docs{$_SESSION['emp']}/tmp/articulos.csv";
     $archivo = new Archivo($fileName);
     $archivo->setColumnsDelimiter(";");
     //$archivo->setColumnsEnclosure('"');
     if ($archivo->open("r")) {
         set_time_limit(0);
         // Me salto la primera línea de cabecera
         $linea = $archivo->readLine();
         while (($linea = $archivo->readLine()) !== FALSE) {
             //print_r($linea);
             $fam = new Familias();
             $fam = $fam->find('Observations', trim($linea[2]));
             $idFamilia = $fam->getIDFamilia();
             if (!$idFamilia) {
                 $idFamilia = 1;
             }
             $arti = new Articulos();
             $arti->setCodigo($linea[0]);
             $arti->setDescripcion(utf8_encode($linea[1]));
             $arti->setIDCategoria($idFamilia);
             $arti->setAllowsChildren($linea[4]);
             $arti->setInventario(1);
             $arti->setIDIva(1);
             $arti->setPmc(str_replace(",", ".", $linea[6]));
             $arti->setPvd(str_replace(",", ".", $linea[7]));
             $arti->setPvp(str_replace(",", ".", $linea[8]));
             $arti->setMargen(str_replace(",", ".", $linea[9]));
             $arti->setPeso(str_replace(",", ".", $linea[5]));
             $arti->setStockMaximo($linea[11]);
             $arti->setStockMinimo($linea[12]);
             $arti->setGarantia("S/F");
             $idArti = $arti->create();
             if (!$idArti) {
                 $nErrores += 1;
                 print_r($arti->getErrores());
             } else {
                 $nAciertos += 1;
             }
             unset($arti);
         }
         $archivo->close();
     } else {
         $this->values['errores'][] = "El fichero de importación " . $fileName . " no existe";
     }
     echo "Aciertos: {$nAciertos}, Errores: {$nErrores}";
     unset($archivo);
 }
 public function Articulos()
 {
     $nItems = 0;
     $nErrores = 0;
     $dbLink = mysql_connect("localhost", "root", "albatronic");
     $query = "TRUNCATE {$this->dbDestino}.ErpArticulos";
     mysql_query($query);
     $query = "select * from {$this->dbOrigen}.articulos";
     $result = mysql_query($query, $dbLink);
     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
         $row = $this->utf($row);
         $f = new Familias();
         $f = $f->find("Observations", $row['IDSubfamilia']);
         $idFamilia = $f->getIDFamilia();
         $c = new Articulos();
         $c->setCodigo($row['IDArticulo']);
         $c->setDescripcion($row['Descripcion']);
         $c->setIDCategoria($row['IDFamilia']);
         $c->setIDFamilia($idFamilia ? $idFamilia : 0);
         $c->setIDFabricante($row['IDFabricante']);
         $c->setPvd($row['Pvd']);
         $c->setPvp($row['Pvp']);
         $c->setMargen($row['Margen']);
         $c->setPmc($row['Pmc']);
         $c->setIDIva($row['IDIva']);
         $c->setEtiqueta($row['Etiqueta']);
         $c->setCodigoEAN($row['CodigoEAN']);
         $c->setGarantia($row['Garantia']);
         $c->setPeso($row['Peso']);
         $c->setVolumen($row['Volumen']);
         $c->setCaracteristicas($row['Caracteristicas']);
         $c->setFechaUltimoPrecio($row['FechaUltimoPrecio']);
         $c->setVigente($row['Vigente']);
         $c->setPrimaryKeyMD5(md5($row['IDArticulo']));
         if (!$c->create()) {
             $errores[] = $c->getErrores();
             $nErrores++;
         } else {
             $nItems++;
         }
     }
     //mysql_close($dbLink);
     echo "Artículos {$nItems}<br/>";
     if (count($errores)) {
         echo "<pre>";
         print_r($errores);
         echo "</pre>";
     }
 }
 /**
  * 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);
 }