Se parsean talles desde nombres de productos. Talles en varias filas se matchean por nombre y precio
This commit is contained in:
parent
e712d3265f
commit
72fd85ab25
|
@ -21,47 +21,84 @@ class ImportarProductoSeeder extends Seeder
|
||||||
$iHeader = $this->obtenerIndiceDeHeader($csv);
|
$iHeader = $this->obtenerIndiceDeHeader($csv);
|
||||||
$csv->setHeaderOffset($iHeader);
|
$csv->setHeaderOffset($iHeader);
|
||||||
$registros = $csv->getRecords();
|
$registros = $csv->getRecords();
|
||||||
|
$registrosArray = iterator_to_array($registros);
|
||||||
|
|
||||||
$toInsert = [];
|
$toInsert = [];
|
||||||
$categoria = '';
|
$categoria = '';
|
||||||
|
$tallesVariasFilas = '';
|
||||||
foreach($registros as $i => $registro){
|
foreach($registros as $i => $registro){
|
||||||
|
$nombre = $this->generarNombre($registro);
|
||||||
|
$tipo = $registro[$this::FILA_HEADER];
|
||||||
|
$desc = null;
|
||||||
|
$precio = $registro['Precio'];
|
||||||
//filas que están arriba del header
|
//filas que están arriba del header
|
||||||
if ($i <= $iHeader){
|
if ($i <= $iHeader){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//finalizar
|
//finalizar
|
||||||
if ($registro[$this::FILA_HEADER] == $this::ULTIMA_FILA){
|
if ($tipo == $this::ULTIMA_FILA){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//filas que no tienen tipo
|
//filas que no tienen tipo
|
||||||
if (!Arr::has($registro,$this::FILA_HEADER)|| trim($registro[$this::FILA_HEADER]) == ''){
|
if (!Arr::has($registro,$this::FILA_HEADER)|| trim($tipo) == ''){
|
||||||
var_dump("no hay tipo en la fila " . $i);
|
var_dump("no hay tipo en la fila " . $i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//saltear bono de transporte
|
//saltear bono de transporte
|
||||||
if ($registro[$this::FILA_HEADER] == "T"){
|
if ($tipo == "T"){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//obtener categoria
|
//obtener categoria
|
||||||
if ($registro['Producto'] == '') {
|
if ($nombre == '') {
|
||||||
//es la pregunta de la copa?
|
//es la pregunta de la copa?
|
||||||
if (Str::contains($registro[$this::FILA_HEADER],"¿")) { continue; }
|
if (Str::contains($tipo,"¿")) { continue; }
|
||||||
$categoria = $registro[$this::FILA_HEADER];
|
$categoria = $tipo;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//obtener talles
|
||||||
|
if ($tipo == "PTC") {
|
||||||
|
$nombreLower = strtolower(str_replace('-','', $nombre));
|
||||||
|
// talles en una sola fila,
|
||||||
|
// asume que están como '$n a $m' con $n, $m numeros y $n < $m.
|
||||||
|
if (str_contains($nombreLower, 'talles')) {
|
||||||
|
[$nombre, $talles] = explode('talles', $nombreLower);
|
||||||
|
$nombre = trim($nombre);
|
||||||
|
$talles = trim($talles);
|
||||||
|
[$inf, $sup] = explode(' a ', $talles);
|
||||||
|
for ($i=$inf; $i < $sup; $i++) $desc = $desc.$i.'-';
|
||||||
|
$desc = $desc.$sup;
|
||||||
|
}
|
||||||
|
// talles en varias filas,
|
||||||
|
// asume que mismos productos con distinto talle están en filas consecutivas
|
||||||
|
if (str_contains($nombreLower, 'talle')) {
|
||||||
|
[$nombre, $talle] = explode('talle', $nombreLower);
|
||||||
|
$nombre = trim($nombre);
|
||||||
|
$talle = trim(str_replace('.', '', $talle));
|
||||||
|
$esUltimo = $this->esUltimoTalle($nombre, $precio, $i, $registrosArray);
|
||||||
|
if ($esUltimo) {
|
||||||
|
$desc = $tallesVariasFilas . $talle;
|
||||||
|
$tallesVariasFilas = '';
|
||||||
|
} else {
|
||||||
|
$tallesVariasFilas = $tallesVariasFilas . $talle . '-';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//completar producto
|
//completar producto
|
||||||
$toInsert[] = [
|
$toInsert[] = [
|
||||||
'fila' => $i,
|
'fila' => $i,
|
||||||
'categoria' => $categoria,
|
'categoria' => $categoria,
|
||||||
'nombre' => trim(str_replace('*', ' ',$registro['Producto'])),
|
'nombre' => $nombre,
|
||||||
'precio' => $registro['Precio'],
|
'precio' => $precio,
|
||||||
'proveedor_id' => $this->obtenerProveedor($registro['Producto']),
|
'proveedor_id' => $this->obtenerProveedor($registro['Producto']),
|
||||||
'bono' => ($categoria == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO')
|
'bono' => ($categoria == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO'),
|
||||||
|
'descripcion' => $desc
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,6 +120,25 @@ class ImportarProductoSeeder extends Seeder
|
||||||
return $iheader;
|
return $iheader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function generarNombre($registro)
|
||||||
|
{
|
||||||
|
return trim(str_replace('*', ' ',$registro['Producto']));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function esUltimoTalle($nombre, $precio, $indice, $registros) {
|
||||||
|
$i = $indice+1;
|
||||||
|
$registro = $registros[$i];
|
||||||
|
$tipo = $registro[$this::FILA_HEADER];
|
||||||
|
if ($tipo == 'PTC') {
|
||||||
|
$sigNombre = $this->generarNombre($registro);
|
||||||
|
$sigNombre = strtolower(str_replace('-','', $sigNombre));
|
||||||
|
$sigNombre = trim(explode('talle', $sigNombre)[0]);
|
||||||
|
$sigPrecio = $registro['Precio'];
|
||||||
|
return $nombre != $sigNombre || $sigPrecio != $precio;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private function obtenerProveedor($nombre) {
|
private function obtenerProveedor($nombre) {
|
||||||
$result = null;
|
$result = null;
|
||||||
if (Str::contains($nombre,"*")){
|
if (Str::contains($nombre,"*")){
|
||||||
|
|
Loading…
Reference in New Issue