format('D d M , Y'); }catch (\Exception $e) { abort(response()->json([$this->error=>$e->getMessage()], $this->NotFound)); } } public function validateDetails($vendor,$rate,$details){ $ratesInVendor = \App\Rate::whereId($rate)->whereVendorId($vendor)->get(); if (!$ratesInVendor->isEmpty()) { $details->each(function ($detail) { $options = array_map(function ($option) use ($detail){ if (!\App\Optionable::whereOptionableId($detail['item_id'])->whereOptionDetailId($option["option_detail"]['id'])->get()->isEmpty()) { return $option; } $item_name = \App\Item::whereId($detail['item_id'])->value('name'); $option_name = \App\Option::whereCode($option['code'])->value('name'); $option_detail = $option['option_detail']['name']; abort(response()->json([$this->error=>'Item: '.$item_name.' has no '.$option_name.' '.$option_detail.' option enabled'], $this->NotFound)); },$detail['options']); return $options; }); return $details; } abort(response()->json([$this->error=>'Rate Vendor missmatch'], $this->NotFound)); } public static function getOptionLabel($string, $id = null ,$price = null){ try { $option = new Collection(\App\Option::whereCode(preg_replace('/[0-9]/','',$string))->get('code')[0]); is_null($id)?:$option['rate_detail_id']= $id; is_null($price)?:$option['price']= $price; $detail = \App\OptionDetail::whereId(preg_replace('/[a-zA-Z]/','',$string))->get(['id','name'])[0]; $option->put('option_detail',$detail); return $option; } catch (\Exception $e) { return $e->getMessage(); } } public function getRateList($vendor_id){ try { $vendor = \App\Vendor::findOrFail($vendor_id); $rateList = \App\Rate::whereVendorId($vendor_id)->get()->map(function ($rate) { $rateObj['id'] = $rate->id; $rateObj['name'] = $rate->rate_list->name; return $rateObj; }); if (!$rateList->isEmpty()) { return $rateList; }else{ abort($this->NotFound, $this->error.": Vendor id:$vendor_id haven't active or available rate lists"); } } catch (\Exception $e) { abort(response()->json([$this->error=>'Vendor id:'.$vendor_id.' not found.'], $this->NotFound)); } } public function getItemList($data){ $baseRateId = $this->getRateList($data['vendor_id'])->where('name','Precios Base')->first()['id']; $itemList = \App\RateDetail::whereRateId($baseRateId)->groupBy('item_id')->get('item_id')->map(function ($item,$key) use ($data, $baseRateId) { try { $itemObj = \App\Item::findOrFail($item->item_id); } catch (\Exception $e) { abort(response()->json([$this->error=>$e->getMessage()], $this->NotFound)); } if (!$itemObj->status) { return ['id' =>'Disabled','key' =>$key]; } if (array_key_exists('rate_id', $data)){ try { \App\Rate::whereVendorId($data['vendor_id'])->whereId($data['rate_id'])->firstOrFail(); } catch (\Exception $e) { abort(response()->json([$this->error=>'The rate list id:'.$data['rate_id'].' does not belong to the vendor id:'.$data['vendor_id']], $this->NotFound)); } $ratesIds = \App\RateDetail::whereRateId($data['rate_id'])->groupBy('item_id')->get('item_id'); if ($ratesIds->contains('item_id',$item->item_id)) { $rate_id = (int)$data['rate_id']; } else{ $rate_id = $baseRateId; } }else{ $rate_id = $baseRateId; } $item['rate_id'] = $rate_id; $optionables = \App\Optionable::whereOptionableId($item->item_id)->get(); // if ($item->item_id = 27) { // echo json_encode($optionables);die; if ($optionables->isEmpty()){ // echo json_encode('test');die; $optionableObj = new Collection(); $optionableObj->put('code',null); try{ $price = \App\RateDetail::whereRateId($item->rate_id)->whereItemId($item->item_id)->whereOption(null)->value('public_price'); $optionableObj->put('price',$price); }catch (\Exception $e) { abort(response()->json([$this->error=>$e->getMessage()], $this->NotFound)); } // echo json_encode($optionableObj); }else{ $optionableObj = \App\Option::whereCode($optionables->first()->value('option_code'))->first(); $optionDetails = $optionables->map(function ($optionable) use ($item){ try { $detailObj = \App\OptionDetail::findOrFail($optionable->option_detail_id); try{ // echo json_encode(['item: '=>$item->item_id,'rate: '=>$item->rate_id,'code'=>$optionable->option_code.$optionable->option_detail_id]);echo " \n"; $price = \App\RateDetail::whereRateId($item->rate_id)->whereItemId($item->item_id)->whereOption($optionable->option_code.$optionable->option_detail_id)->firstOrFail()->value('public_price'); $detailObj['price'] = $price; // echo json_encode(\App\RateDetail::whereRateId($item->rate_id)->whereItemId($item->item_id)->whereOption($optionable->option_code.$optionable->option_detail_id)->toSql());die; }catch (\ModelNotFoundException $e) { abort(response()->json([$this->error=>$e->getMessage()], $this->NotFound)); } } catch (\Exception $e) { $message = $e->getMessage()." Params, item: $item->item_id, rate: $item->rate_id"; abort(response()->json([$this->error=>$message], $this->NotFound)); } return $detailObj; }); $optionableObj['option_details']=$optionDetails; }#termina elsee // }#if de item en especifico $itemObj['optionables']= $optionableObj; // $itemObj['rate_id'] = $rate_id; return $itemObj; }); $itemList->forget($itemList->where('id','Disabled')->pluck('key')->toArray()); return $itemList; } public function validateOption($option){ echo json_encode($option);die; $val = \App\Optionable::whereOptionableId($option['item_id'])->get(); } }