예제 #1
0
 public function getFilterByStatusArticleDates()
 {
     $TIPO_REMISION = self::TIPO_REMISION;
     $title = 'Ventas';
     $input = Input::all();
     $idsPurchase = '0';
     $amounts = array();
     $articleName = $input['article'];
     $article = Article::find($input['article']);
     if (!empty($article)) {
         $articleName = $article->name;
         foreach ($article->purchaseItems as $pitem) {
             $idsPurchase .= $pitem->purchase->id . ',';
             $amounts[$pitem->purchase->id] = $pitem->amount;
         }
     }
     $idsPurchase = trim($idsPurchase, ',');
     $purchases = Purchase::whereRaw('id in (' . $idsPurchase . ')')->whereRaw('status = "' . $input['estado'] . '" AND (created_at BETWEEN "' . $input['fecha1'] . '" AND "' . $input['fecha2'] . '")')->orderBy('id', 'asc')->paginate(50);
     $mensaje = 'Compras con estado <strong>' . $input['estado'] . '</strong> entre <strong>' . $input['fecha1'] . '</strong> y <strong>' . $input['fecha2'] . '</strong> que contienen el artículo <strong>' . $articleName . '</strong>';
     return View::make('purchases.list')->with(compact('title', 'purchases', 'mensaje', 'input', 'amounts', 'mensaje', 'TIPO_REMISION'));
 }
예제 #2
0
 /**
  * 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;
 }