public function getFilterByArticleComments() { $title = 'Daños'; $input = Input::all(); $idsDamage = '0'; $article = Article::find($input['article']); if (!empty($article)) { foreach ($article->damageItems as $ditems) { $idsDamage .= $ditems->damage->id . ','; } } $idsDamage = trim($idsDamage, ','); $damages = Damage::whereRaw('id in (' . $idsDamage . ')')->whereRaw('comments like "%' . $input['comments'] . '%"')->orderBy('id', 'desc')->paginate(6); $filterDamage = 'Daños que contienen el artículo <strong>' . $input['article'] . '</strong> y en los comentarios del remisionero <strong>' . $input['comments'] . '</strong>.'; return View::make('damages.index')->with(compact('title', 'damages', 'filterDamage', 'input')); }
/** * Devuelve un arreglo con todos los movimientos de un artículo ordenados por fecha ascendente. * Mezcla compras, ventas, daños y entregas inmediatas. * Se excluyen las rotaciones porque se asume que todos los establecimientos están bajo el mismo nit. * Se creó esta función para tener un log del artículo sin importar la sucursal. */ public function movimientos($fecha1, $fecha2) { //Arreglo que tendrá todos los movimientos $movimientos = []; //Inicio con las compras $ids = '0'; $amounts = array(); //Obtiene las compras que tienen el artículo actual dentro de sus items foreach ($this->purchaseItems as $item) { $ids .= $item->purchase->id . ','; $amounts[$item->purchase->id] = $item->amount; } //Convierte el string en un array $ids = trim($ids, ','); //Obtiene las compras del artículo actual $purchases = Purchase::whereRaw('id in (' . $ids . ')')->whereRaw('created_at BETWEEN "' . $fecha1 . '" AND "' . $fecha2 . '"')->orderBy('created_at', 'asc')->get(); foreach ($purchases as $purchase) { $movimientos[] = array('fecha' => $purchase->created_at, 'tipo' => 'compra', 'id' => $purchase->id, 'sucursal' => $purchase->branch()->first()->name, 'cantidad' => $amounts[$purchase->id], 'estado' => $purchase->status, 'comentario' => $purchase->comments, 'nota' => isset($purchase->purchaseStore()->orderBy('created_at', 'desc')->first()->comments) ? $purchase->purchaseStore()->orderBy('created_at', 'desc')->first()->comments : ''); } //Inicio con las ventas $ids = '0'; $amounts = array(); //Obtengo las ventas que tienen el artículo actual dentro de sus items foreach ($this->saleItems as $item) { $ids .= $item->sale->id . ','; $amounts[$item->sale->id] = $item->amount; } //Convierte el string en un array $ids = trim($ids, ','); //Obtiene las ventas del artículo actual $sales = Sale::whereRaw('id in (' . $ids . ')')->whereRaw('created_at BETWEEN "' . $fecha1 . '" AND "' . $fecha2 . '"')->orderBy('created_at', 'asc')->get(); foreach ($sales as $sale) { $movimientos[] = array('fecha' => $sale->created_at, 'tipo' => 'venta', 'id' => $sale->id, 'sucursal' => $sale->branch()->first()->name, 'cantidad' => $amounts[$sale->id], 'estado' => $sale->status, 'comentario' => $sale->comments, 'nota' => isset($sale->saleStore()->orderBy('created_at', 'desc')->first()->comments) ? $sale->saleStore()->orderBy('created_at', 'desc')->first()->comments : ''); } //Inicio con los daños $ids = '0'; $amounts = array(); //Obtengo los daños que tienen el artículo actual dentro de sus items foreach ($this->damageItems as $item) { $ids .= $item->damage->id . ','; $amounts[$item->damage->id] = $item->amount; } //Convierte el string en un array $ids = trim($ids, ','); //Obtiene los daños del artículo actual $damages = Damage::whereRaw('id in (' . $ids . ')')->whereRaw('created_at BETWEEN "' . $fecha1 . '" AND "' . $fecha2 . '"')->orderBy('created_at', 'asc')->get(); foreach ($damages as $damage) { $movimientos[] = array('fecha' => $damage->created_at, 'tipo' => 'daño', 'id' => $damage->id, 'sucursal' => $damage->branch()->first()->name, 'cantidad' => $amounts[$damage->id], 'estado' => $damage->status, 'comentario' => $damage->comments, 'nota' => isset($damage->damageStore()->orderBy('created_at', 'desc')->first()->comments) ? $damage->damageStore()->orderBy('created_at', 'desc')->first()->comments : ''); } //Inicio con las entregas inmediatas $ids = '0'; $amounts = array(); //Obtengo las entregas inmediatas que tienen el artículo actual dentro de sus items foreach ($this->instantItems as $item) { $ids .= $item->instant->id . ','; $amounts[$item->instant->id] = $item->amount; } //Convierte el string en un array $ids = trim($ids, ','); //Obtiene las entregas inmediatas del artículo actual $instants = Instant::whereRaw('id in (' . $ids . ')')->whereRaw('created_at BETWEEN "' . $fecha1 . '" AND "' . $fecha2 . '"')->orderBy('created_at', 'asc')->get(); foreach ($instants as $instant) { $movimientos[] = array('fecha' => $instant->created_at, 'tipo' => 'entrega inmediata', 'id' => $instant->id, 'sucursal' => $instant->branch()->first()->name, 'cantidad' => $amounts[$instant->id], 'estado' => $instant->status, 'comentario' => $instant->comments, 'nota' => isset($instant->instantStore()->orderBy('created_at', 'desc')->first()->comments) ? $instant->instantStore()->orderBy('created_at', 'desc')->first()->comments : ''); } //Ordena el arreglo por el primer elemento de los arreglos internos fecha asort($movimientos); return $movimientos; }