/**
  * Display a listing of the resource.
  *
  * @return \Illuminate\Http\Response
  */
 public function ShowContributions($affiliate_id)
 {
     $affiliate = Affiliate::idIs($affiliate_id)->first();
     $contribution = Contribution::affiliateidIs($affiliate->id)->first();
     if ($contribution) {
         $data = ['affiliate' => $affiliate];
         return view('contributions.view', $data);
     } else {
         $message = "No existe Registro de Aportes";
         Session::flash('message', $message);
         return redirect('affiliate/' . $affiliate_id);
     }
 }
 /**
  * Display the specified resource.
  *
  * @param  int  $id
  * @return \Illuminate\Http\Response
  */
 public function getData($affiliate)
 {
     $affiliate = Affiliate::idIs($affiliate)->first();
     $spouse = Spouse::affiliateidIs($affiliate->id)->first();
     if (!$spouse) {
         $spouse = new Spouse();
     }
     if ($affiliate->gender == 'M') {
         $gender_list = ['' => '', 'C' => 'CASADO', 'S' => 'SOLTERO', 'V' => 'VIUDO', 'D' => 'DIVORCIADO'];
     } elseif ($affiliate->gender == 'F') {
         $gender_list = ['' => '', 'C' => 'CASADA', 'S' => 'SOLTERA', 'V' => 'VIUDA', 'D' => 'DIVORCIADA'];
     }
     if ($affiliate->city_identity_card_id) {
         $affiliate->city_identity_card = City::idIs($affiliate->city_identity_card_id)->first()->shortened;
     } else {
         $affiliate->city_identity_card = '';
     }
     if ($affiliate->city_birth_id) {
         $affiliate->city_birth = City::idIs($affiliate->city_birth_id)->first()->name;
     } else {
         $affiliate->city_birth = '';
     }
     if ($affiliate->city_address_id) {
         $affiliate->city_address = City::idIs($affiliate->city_address_id)->first()->name;
     } else {
         $affiliate->city_address = '';
     }
     if ($affiliate->city_address_id || $affiliate->zone || $affiliate->Street || $affiliate->number_address || $affiliate->phone || $affiliate->cell_phone) {
         $info_address = TRUE;
     } else {
         $info_address = FALSE;
     }
     if ($spouse->identity_card) {
         $info_spouse = TRUE;
     } else {
         $info_spouse = FALSE;
     }
     $last_contribution = Contribution::affiliateidIs($affiliate->id)->orderBy('month_year', 'desc')->first();
     $consulta = DB::table('affiliates')->select(DB::raw('SUM(contributions.gain) as gain, SUM(contributions.public_security_bonus) as public_security_bonus,
                                     SUM(contributions.quotable) as quotable, SUM(contributions.total) as total,
                                     SUM(contributions.retirement_fund) as retirement_fund, SUM(contributions.mortuary_quota) as mortuary_quota'))->leftJoin('contributions', 'affiliates.id', '=', 'contributions.affiliate_id')->where('affiliates.id', '=', $affiliate->id)->get();
     foreach ($consulta as $item) {
         $total_gain = Util::formatMoney($item->gain);
         $total_public_security_bonus = Util::formatMoney($item->public_security_bonus);
         $total_quotable = Util::formatMoney($item->quotable);
         $total_retirement_fund = Util::formatMoney($item->retirement_fund);
         $total_mortuary_quota = Util::formatMoney($item->mortuary_quota);
         $total = Util::formatMoney($item->total);
     }
     $data = ['affiliate' => $affiliate, 'spouse' => $spouse, 'gender_list' => $gender_list, 'info_address' => $info_address, 'info_spouse' => $info_spouse, 'last_contribution' => $last_contribution, 'total_gain' => $total_gain, 'total_public_security_bonus' => $total_public_security_bonus, 'total_quotable' => $total_quotable, 'total_retirement_fund' => $total_retirement_fund, 'total_mortuary_quota' => $total_mortuary_quota, 'total' => $total];
     $data = array_merge($data, self::getViewModel());
     return $data;
 }
 public static function getViewModel($affiliate_id, $year, $category_id = null, $last_contribution = null)
 {
     $affiliate = Affiliate::idIs($affiliate_id)->first();
     $categories = Category::where('name', '<>', 'S/N')->get();
     $list_categories = array('' => '');
     foreach ($categories as $item) {
         $list_categories[$item->id] = $item->name;
     }
     $now = Carbon::now();
     $from = Carbon::parse($affiliate->date_entry);
     $to = Carbon::createFromDate($now->year, $now->month, 1)->subMonth();
     $ipc_actual = IpcRate::select('index')->where('month_year', '=', Carbon::createFromDate($now->year, $now->month, 1)->toDateString())->first();
     $months = new Collection();
     $month = array();
     for ($j = 1; $j <= 12; $j++) {
         $contribution = Contribution::select(['month_year'])->where('affiliate_id', $affiliate_id)->where('month_year', '=', Carbon::createFromDate($year, $j, 1)->toDateString())->first();
         $contribution_rate = ContributionRate::where('month_year', '=', Carbon::createFromDate($year, $j, 1)->toDateString())->first();
         $ipc_rate = IpcRate::where('month_year', '=', Carbon::createFromDate($year, $j, 1)->toDateString())->first();
         if (!$contribution) {
             if ($year == $from->year) {
                 if ($j >= $from->month) {
                     $month["id"] = $j;
                     $month["name"] = Util::getMes($j);
                     $month["retirement_fund"] = $contribution_rate ? $contribution_rate->retirement_fund : '0';
                     $month["mortuary_quota"] = $contribution_rate ? $contribution_rate->mortuary_quota : '0';
                     $month["ipc_rate"] = $contribution_rate ? $ipc_rate->index : '0';
                     $months->push($month);
                 }
             } elseif ($year == $to->year) {
                 if ($j <= $to->month) {
                     $month["id"] = $j;
                     $month["name"] = Util::getMes($j);
                     $month["retirement_fund"] = $contribution_rate ? $contribution_rate->retirement_fund : '0';
                     $month["mortuary_quota"] = $contribution_rate ? $contribution_rate->mortuary_quota : '0';
                     $month["ipc_rate"] = $contribution_rate ? $ipc_rate->index : '0';
                     $months->push($month);
                 }
             } else {
                 $month["id"] = $j;
                 $month["name"] = Util::getMes($j);
                 $month["retirement_fund"] = $contribution_rate ? $contribution_rate->retirement_fund : '0';
                 $month["mortuary_quota"] = $contribution_rate ? $contribution_rate->mortuary_quota : '0';
                 $month["ipc_rate"] = $contribution_rate ? $ipc_rate->index : '0';
                 $months->push($month);
             }
         }
     }
     if (!$last_contribution) {
         $date = Carbon::createFromDate($year, $months[0]["id"], 1);
         $last_contribution = Contribution::affiliateidIs($affiliate->id)->where('month_year', '<', $date->toDateString())->first();
         if (!$last_contribution) {
             $last_contribution = new Contribution();
             $base_wage = BaseWage::whereYear('month_year', '<=', $year)->first();
             $last_contribution->base_wage = $base_wage->amount;
             $last_contribution->study_bonus = 0;
             $last_contribution->position_bonus = 0;
             $last_contribution->border_bonus = 0;
             $last_contribution->east_bonus = 0;
         }
         $last_contribution->date = Util::getDateShort($last_contribution->month_year);
     }
     if ($category_id) {
         $affiliate->category_id = $category_id;
     }
     return ['affiliate' => $affiliate, 'list_categories' => $list_categories, 'categories' => Category::where('name', '<>', 'S/N')->orderBy('id', 'asc')->get(array('percentage', 'name', 'id')), 'ipc_actual' => $ipc_actual, 'months' => $months, 'year' => $year, 'last_contribution' => $last_contribution, 'direct_contribution' => ''];
 }
 public function getData($afid)
 {
     $affiliate = Affiliate::idIs($afid)->first();
     $spouse = Spouse::affiliateidIs($afid)->first();
     if (!$spouse) {
         $spouse = new Spouse();
     }
     $retirement_fund = RetirementFund::afiIs($afid)->first();
     if (!$retirement_fund) {
         $now = Carbon::now();
         $last_retirement_fund = RetirementFund::whereYear('created_at', '=', $now->year)->where('deleted_at', '=', null)->orderBy('id', 'desc')->first();
         $retirement_fund = new RetirementFund();
         if ($last_retirement_fund) {
             $number_code = Util::separateCode($last_retirement_fund->code);
             $code = $number_code + 1;
         } else {
             $code = 1;
         }
         $retirement_fund->code = $code . "/" . $now->year;
         $retirement_fund->affiliate_id = $afid;
         $retirement_fund->save();
     }
     $applicant = Applicant::retirementFundIs($retirement_fund->id)->first();
     if (!$applicant) {
         $applicant = new Applicant();
     }
     $requirements = Requirement::modalityIs($retirement_fund->retirement_fund_modality_id)->get();
     $documents = Document::retirementFundIs($retirement_fund->id)->get();
     $antecedents = Antecedent::retirementFundIs($retirement_fund->id)->get();
     if ($retirement_fund->retirement_fund_modality_id) {
         $info_modality = TRUE;
     } else {
         $info_modality = FALSE;
     }
     if ($applicant->identity_card) {
         $info_applicant = TRUE;
     } else {
         $info_applicant = FALSE;
     }
     if (Document::retirementFundIs($retirement_fund->id)->first()) {
         $info_documents = TRUE;
     } else {
         $info_documents = FALSE;
     }
     if (Antecedent::retirementFundIs($retirement_fund->id)->first()) {
         $info_antecedents = TRUE;
     } else {
         $info_antecedents = FALSE;
     }
     if ($retirement_fund->comment) {
         $info_comment = TRUE;
     } else {
         $info_comment = FALSE;
     }
     $lastContribution = Contribution::affiliateidIs($affiliate->id)->orderBy('month_year', 'desc')->first();
     $affiliate->service_start_date = $affiliate->date_entry;
     $affiliate->service_end_date = $lastContribution->month_year;
     $data = array('affiliate' => $affiliate, 'spouse' => $spouse, 'retirement_fund' => $retirement_fund, 'applicant' => $applicant, 'requirements' => $requirements, 'documents' => $documents, 'antecedents' => $antecedents, 'info_modality' => $info_modality, 'info_applicant' => $info_applicant, 'info_documents' => $info_documents, 'info_antecedents' => $info_antecedents, 'info_comment' => $info_comment);
     $data = array_merge($data, self::getViewModel());
     return $data;
 }