orderByAsc('descripcion')->findMany(); return view('ventas.precios.proyectos', compact('proyectos')); } public static function list() { $proyecto = \model(Proyecto::class)->findOne(get('proyecto')); return view('ventas.precios.list', compact('proyecto')); } public static function import() { $proyectos = \model(Proyecto::class)->orderByAsc('descripcion')->findMany(); return view('ventas.precios.import', compact('proyectos')); } public static function importar() { $proyecto = \model(Proyecto::class)->findOne(post('proyecto')); $fecha = Carbon::createFromDate(post('year'), post('month'), post('day'), config('app.timezone')); $file = explode(PHP_EOL, trim(file_get_contents($_FILES['archivo']['tmp_name']))); $columnas = explode(';', array_shift($file)); $tr = model(TipoEstadoPrecio::class)->where('descripcion', 'reemplazado')->findOne()->id; $tv = model(TipoEstadoPrecio::class)->where('descripcion', 'vigente')->findOne()->id; foreach ($file as $line) { if (trim($line) == '') { continue; } $info = explode(';', $line); $tipo = \model(TipoUnidad::class)->where('descripcion', $info[0])->findOne(); $unidad = \model(Unidad::class)->where('tipo', $tipo->id)->where('descripcion', $info[1])->where('proyecto', $proyecto->id)->findOne(); if (!$unidad) { continue; } try { self::reemplazar($unidad->id, $info[2], $fecha, $tr, $tv); } catch (\Exception $e) { continue; } } header('Location: ' . nUrl('precios', 'list', ['proyecto' => $proyecto->id])); } public static function add() { $proyecto = \model(Proyecto::class)->findOne(get('proyecto')); return view('ventas.precios.add', compact('proyecto')); } public static function agregar() { $proyecto = get('proyecto'); $fecha = Carbon::createFromDate(post('year'), post('month'), post('day'), config('app.timezone')); $precios = []; foreach (post() as $name => $valor) { if ($valor == '' or strpos($name, 'precio') === false) { continue; } list($tipo, $id) = explode(':', $name); $tipo = trim(str_replace('precio', '', $tipo), '_'); $id = explode('-', $id); switch (count($id)) { case 1: $precios []= ['tipo' => 'pt', 'id' => $id[0], 'valor' => $valor]; break; case 2: $exists = false; foreach ($precios as $precio) { if ($precio['tipo'] == 'pt' and $precio['id'] == $id[0]) { $exists = true; break; } } if (!$exists) { $precios []= ['tipo' => 'subtipo', 'id' => $id[1], 'pt' => $id[0], 'valor' => $valor]; } break; case 3: $exists = false; foreach ($precios as $precio) { if ($precio['tipo'] == 'pt' and $precio['id'] == $id[0]) { $exists = true; break; } if ($precio['tipo'] == 'subtipo' and 'id' == $id[1] and 'pt' == $id[0]) { $exists = true; break; } } if (!$exists) { $precios []= ['tipo' => 'unidad', 'id' => $id[2], 'valor' => $valor]; } break; } } foreach ($precios as $precio) { $precio = (object) $precio; try { switch ($precio->tipo) { case 'pt': $pt = model(ProyectoTipoUnidad::class)->findOne($precio->id); $pt->setPrecios($fecha, $precio->valor); break; case 'subtipo': $pt = model(ProyectoTipoUnidad::class)->findOne($precio->pt); $pt->setPreciosSubtipo($precios->id, $fecha, $precio->valor); break; case 'unidad': $unidad = model(Unidad::class)->findOne($precio->id); $unidad->setPrecio($fecha, $precio->valor); break; } } catch(\Exception $e) { continue; } } header('Location: ' . nUrl('precios', 'list', ['proyecto' => $proyecto])); } protected static function reemplazar(int $unidad_id, float $valor, \DateTime $fecha, int $tr = 0, int $tv = 0) { if ($tr == 0) { $tr = model(TipoEstadoPrecio::class)->where('descripcion', 'reemplazado')->findOne()->id; } if ($tv == 0) { $tv = model(TipoEstadoPrecio::class)->where('descripcion', 'vigente')->findOne()->id; } $olds = \model(Precio::class)->where('unidad', $unidad_id)->findMany(); if ($olds !== false) { foreach ($olds as $old) { if (!$old->vigente()) { continue; } $data = [ 'precio' => $old->id, 'fecha' => $fecha->format('Y-m-d'), 'estado' => $tr ]; $estado = \model(EstadoPrecio::class)->create($data); $estado->save(); } } $data = [ 'unidad' => $unidad_id, 'valor' => $valor ]; $precio = (new Factory(Precio::class))->where($data)->find(); if (!$precio) { $precio = \model(Precio::class)->create($data); $precio->save(); } $data = [ 'precio' => $precio->id, 'fecha' => $fecha->format('Y-m-d'), 'estado' => $tv ]; $estado = \model(EstadoPrecio::class)->create($data); $estado->save(); } }