/** * 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>"; } }
private function importArticulos() { $obj = new Articulos(); $obj->truncate(); $file = getcwd() . "/docs/docs1/import/ARTICULOS.txt"; $archivo = new Archivo($file); $archivo->setColumnsDelimiter(";"); $archivo->setColumnsEnclosure("\""); $errores = 0; if ($archivo->open()) { // Leer la cabecera $titulos = $archivo->readLine(); // Leer el contenido $i = -1; while ($row = $archivo->readLine()) { $i++; $item = array(); foreach ($titulos as $key => $titulo) { $item[$titulo] = $row[$key]; } if ($item['VIGENTE'] == '1') { //print_r($item); $obj = new Articulos(); $obj->setIdFirma($item['IDFIRMA']); $obj->setIdFamilia($item['IDFAMILIA']); $obj->setCodigo($item['IDARTICULO']); $obj->setDescripcion(utf8_encode($item['DESCRIPCION'])); $obj->setPvd(self::trataMoneda($item['PRECIO_COMPRA'])); $obj->setMargen($item['MARGEN']); $obj->setPvp(self::trataMoneda($item['PRECIO_VENTA'])); $obj->setIdIva($item['TIPO_IVA']); $obj->setPackingCompras($item['PACKING']); $obj->setPackingVentas($item['PACKING']); $obj->setMinimoVenta($item['UNIDADES_MINIMAS']); $obj->setObservations(utf8_encode($item['OBSERVACIONES'])); $obj->setAvisosPedidos(utf8_encode($item['AVISOPEDIDOS'])); $obj->setAvisosFacturas(utf8_encode($item['AVISOFACTURAS'])); $obj->setCodigoEAN(utf8_encode($item['EAN'])); $obj->setVigente($item['VIGENTE']); $id = $obj->create(); if (!$id) { print_r($obj->getErrores()); $errores++; } } } $archivo->close(); } if ($errores) { echo "Errores Articulos {$errores}</br>"; } }
/** * 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); }
/** * CARGA LA TABLA DE ARTICULOS EN BASE AL OBJETO XML CONSTRUIDO PREVIAMENTE * DEVUELVE UN ENTERO CON EL NUMEROS DE ERRORES PRODUCIDOS EN LA CARGA * A TODOS LOS ARTICULOS SE LE PONE UN 20% DE MARGEN COMERCIAL. * @return int */ static function CargaArticulos() { $margen = '20'; $i = 0; $fallos = 0; echo "<table>"; foreach (self::$xml->producto as $item) { $referencia = str_replace("/", "_", trim($item->referencia)); $familia = self::Limpia($item->categoria1); if ($familia == '') { $familia = 'varios'; } $subfamilia = self::Limpia($item->categoria2); if ($subfamilia == '') { $subfamilia = 'varios'; } $tmp = $item->nombre; $nombre = self::Limpia($tmp); $tmp = $item->descripcion; $descripcion = self::Limpia($tmp); $pvd = str_replace(",", ".", $item->precio); $pvp = $pvd * (1 + $margen / 100); $peso = str_replace(",", ".", $item->peso); //Le quito los espacios en blanco al principio y al final //Los espacios en blanco intermedios los sustituyo por %20 para que la url sea correcta. $imagen = str_replace(" ", "%20", trim($item->urlimagen)); $idfabricante = self::CreaFabricante(self::Limpia($item->fabricante)); //Buscar el id de familia $fam = new Familias(); $rows = $fam->cargaCondicion("IDFamilia", "Familia='{$familia}'"); $idfamilia = $rows[0]['IDFamilia']; //Buscar el id de subfamilia $fam = new Familias(); $rows = $fam->cargaCondicion("IDFamilia", "Familia='{$subfamilia}'"); $idsubfamilia = $rows[0]['IDFamilia']; //CREAR ARTICULO EN LA TABLA TEMPORAL $arti = new Articulos(); $arti->setCodigo($referencia); $arti->setDescripcion($nombre); $arti->setIDFabricante($idfabricante); $arti->setIDCategoria($idfamilia); $arti->setIDFamilia($idsubfamilia); $arti->setPvd($pvd); $arti->setPvp($pvp); $arti->setMargen($margen); $arti->setPeso($peso); $arti->setCaracteristicas($descripcion); $arti->setGarantia("S/F"); $arti->setPublish(1); $arti->setFechaUltimoPrecio($item->fechaultimarevision); $idarti = $arti->create(); if (!$idarti) { $fallos++; echo "<tr><td>", $referencia, "</td><td>", $nombre, "</td><td>", $familia, "</td><td>", $subfamilia, "</td></tr>"; echo "<tr><td colspan=4>", serialize($arti->getErrores()), "</td></tr>"; } else { if ($idarti) { $slug = self::actualizaUrlAmigable('Producto', 'Articulos', $idarti, $nombre); } //COPIAR IMAGEN EN LOCALHOST SI NO EXISTE PREVIAMENTE. if ($imagen != '') { self::copiaImagen(); //if(!file_exists("catalogo/".$referencia.".jpg")) DescargaImagen($referencia,$imagen); } } $i += 1; //if ($i>1000) break; } echo "</table>"; return $fallos; }