public function save($request, $id = false)
 {
     $rules = ['last_name' => 'min:3|regex:/^[a-záéíóúàèìòùäëïöüñ\\s]+$/i', 'mothers_last_name' => 'min:3|regex:/^[a-záéíóúàèìòùäëïöüñ\\s]+$/i', 'first_name' => 'min:3|regex:/^[a-záéíóúàèìòùäëïöüñ\\s]+$/i', 'second_name' => 'min:3|regex:/^[a-záéíóúàèìòùäëïöüñ\\s]+$/i'];
     $messages = ['last_name.min' => 'El mínimo de caracteres permitidos para apellido paterno es 3', 'last_name.regex' => 'Sólo se aceptan letras para apellido paterno', 'mothers_last_name.min' => 'El mínimo de caracteres permitidos para apellido materno es 3', 'mothers_last_name.regex' => 'Sólo se aceptan letras para apellido materno', 'first_name.min' => 'El mínimo de caracteres permitidos para primer nombre es 3', 'first_name.regex' => 'Sólo se aceptan letras para primer nombre', 'second_name.min' => 'El mínimo de caracteres permitidos para teléfono de usuario es 3', 'second_name.regex' => 'Sólo se aceptan letras para segundo nombre'];
     $validator = Validator::make($request->all(), $rules, $messages);
     if ($validator->fails()) {
         return redirect('affiliate/' . $id)->withErrors($validator)->withInput();
     } else {
         $spouse = Spouse::affiliateidIs($id)->first();
         if (!$spouse) {
             $spouse = new Spouse();
         }
         $spouse->user_id = Auth::user()->id;
         $spouse->affiliate_id = $id;
         $spouse->identity_card = trim($request->identity_card);
         $spouse->last_name = trim($request->last_name);
         $spouse->mothers_last_name = trim($request->mothers_last_name);
         $spouse->first_name = trim($request->first_name);
         $spouse->second_name = trim($request->second_name);
         $spouse->birth_date = Util::datePick($request->birth_date);
         if ($request->DateDeathSpouseCheck == "on") {
             $spouse->date_death = Util::datePick($request->date_death);
             $spouse->reason_death = trim($request->reason_death);
         } else {
             $spouse->date_death = null;
             $spouse->reason_death = null;
         }
         $spouse->save();
         $message = "Información de Conyuge actualizado con éxito";
         Session::flash('message', $message);
     }
     return redirect('affiliate/' . $id);
 }
 public function Data(Request $request)
 {
     $vouchers = Voucher::select(['id', 'affiliate_id', 'voucher_type_id', 'code', 'created_at', 'total', 'payment_date']);
     if ($request->has('code')) {
         $vouchers->where(function ($vouchers) use($request) {
             $code = trim($request->get('code'));
             $vouchers->where('code', 'like', "%{$code}%");
         });
     }
     if ($request->has('affiliate_name')) {
         $vouchers->where(function ($vouchers) use($request) {
             $affiliate_name = trim($request->get('affiliate_name'));
             $vouchers->where('affiliate_name', 'like', "%{$affiliate_name}%");
         });
     }
     if ($request->has('creation_date')) {
         $vouchers->where(function ($vouchers) use($request) {
             $creation_date = Util::datePick($request->get('creation_date'));
             $vouchers->where('created_at', 'like', "%{$creation_date}%");
         });
     }
     if ($request->has('voucher_type')) {
         $vouchers->where(function ($vouchers) use($request) {
             $voucher_type = trim($request->get('voucher_type'));
             $vouchers->where('voucher_type_id', 'like', "%{$voucher_type}%");
         });
     }
     if ($request->has('payment_date')) {
         $vouchers->where(function ($vouchers) use($request) {
             $payment_date = Util::datePick($request->get('payment_date'));
             $vouchers->where('payment_date', 'like', "%{$payment_date}%");
         });
     }
     return Datatables::of($vouchers)->addColumn('affiliate_name', function ($voucher) {
         return $voucher->affiliate->getTittleName();
     })->editColumn('voucher_type', function ($voucher) {
         return $voucher->voucher_type->name;
     })->addColumn('total', function ($voucher) {
         return Util::formatMoney($voucher->total);
     })->editColumn('created_at', function ($voucher) {
         return $voucher->getCreationDate();
     })->addColumn('status', function ($voucher) {
         return $voucher->payment_date ? 'Pagado' : 'Pendiente';
     })->editColumn('payment_date', function ($voucher) {
         return $voucher->payment_date ? Util::getDateShort($voucher->payment_date) : '-';
     })->addColumn('action', function ($voucher) {
         return '<div class="btn-group" style="margin:-3px 0;">
                     <a href="voucher/' . $voucher->id . '" class="btn btn-primary btn-raised btn-sm">&nbsp;&nbsp;<i class="glyphicon glyphicon-eye-open"></i>&nbsp;&nbsp;</a>
                     <a href="" class="btn btn-primary btn-raised btn-sm dropdown-toggle" data-toggle="dropdown">&nbsp;<span class="caret"></span>&nbsp;</a>
                     <ul class="dropdown-menu">
                         <li><a href="voucher/delete/ ' . $voucher->id . ' " style="padding:3px 10px;"><i class="glyphicon glyphicon-ban-circle"></i> Anular</a></li>
                     </ul>
                 </div>';
     })->make(true);
 }
 public function Data(Request $request)
 {
     $direct_contributions = DirectContribution::select(['id', 'affiliate_id', 'type', 'code', 'created_at', 'total']);
     if ($request->has('code')) {
         $direct_contributions->where(function ($direct_contributions) use($request) {
             $code = trim($request->get('code'));
             $direct_contributions->where('code', 'like', "%{$code}%");
         });
     }
     if ($request->has('affiliate_name')) {
         $direct_contributions->where(function ($direct_contributions) use($request) {
             $affiliate_name = trim($request->get('affiliate_name'));
             $direct_contributions->where('affiliate_name', 'like', "%{$affiliate_name}%");
         });
     }
     if ($request->has('date')) {
         $direct_contributions->where(function ($direct_contributions) use($request) {
             $date = Util::datePick($request->get('date'));
             $direct_contributions->where('created_at', 'like', "%{$date}%");
         });
     }
     return Datatables::of($direct_contributions)->addColumn('affiliate_name', function ($direct_contribution) {
         return $direct_contribution->affiliate->getTittleName();
     })->addColumn('period', function ($direct_contribution) {
         return $direct_contribution->period();
     })->addColumn('total', function ($direct_contribution) {
         return Util::formatMoney($direct_contribution->total);
     })->editColumn('created_at', function ($direct_contribution) {
         return Util::getDateShort($direct_contribution->created_at);
     })->addColumn('action', function ($direct_contribution) {
         return '<div class="btn-group" style="margin:-3px 0;">
                     <a href="direct_contribution/' . $direct_contribution->id . '" class="btn btn-primary btn-raised btn-sm">&nbsp;&nbsp;<i class="glyphicon glyphicon-eye-open"></i>&nbsp;&nbsp;</a>
                     <a href="" class="btn btn-primary btn-raised btn-sm dropdown-toggle" data-toggle="dropdown">&nbsp;<span class="caret"></span>&nbsp;</a>
                     <ul class="dropdown-menu">
                         <li><a href="direct_contribution/delete/ ' . $direct_contribution->id . ' " style="padding:3px 10px;"><i class="glyphicon glyphicon-ban-circle"></i> Anular</a></li>
                     </ul>
                 </div>';
     })->make(true);
 }
 public function save($request, $affiliate = false)
 {
     $rules = ['last_name' => 'min:3|regex:/^[a-záéíóúàèìòùäëïöüñ\\s]+$/i', 'mothers_last_name' => 'min:3|regex:/^[a-záéíóúàèìòùäëïöüñ\\s]+$/i', 'first_name' => 'min:3|regex:/^[a-záéíóúàèìòùäëïöüñ\\s]+$/i', 'second_name' => 'min:3|regex:/^[a-záéíóúàèìòùäëïöüñ\\s]+$/i', 'surname_husband' => 'min:3|regex:/^[a-záéíóúàèìòùäëïöüñ\\s]+$/i', 'phone' => 'numeric', 'cell_phone' => 'numeric'];
     $messages = ['last_name.min' => 'El mínimo de caracteres permitidos para apellido paterno es 3', 'last_name.regex' => 'Sólo se aceptan letras para apellido paterno', 'mothers_last_name.min' => 'El mínimo de caracteres permitidos para apellido materno es 3', 'mothers_last_name.regex' => 'Sólo se aceptan letras para apellido materno', 'first_name.min' => 'El mínimo de caracteres permitidos para primer nombre es 3', 'first_name.regex' => 'Sólo se aceptan letras para primer nombre', 'second_name.min' => 'El mínimo de caracteres permitidos para teléfono de usuario es 3', 'second_name.regex' => 'Sólo se aceptan letras para segundo nombre', 'surname_husband.min' => 'El mínimo de caracteres permitidos para estado civil es 3', 'surname_husband.regex' => 'Sólo se aceptan letras para estado civil', 'phone.numeric' => 'Sólo se aceptan números para teléfono', 'cell_phone.numeric' => 'Sólo se aceptan números para celular'];
     $validator = Validator::make($request->all(), $rules, $messages);
     if ($validator->fails()) {
         return redirect('affiliate/' . $affiliate->id)->withErrors($validator)->withInput();
     } else {
         $affiliate->user_id = Auth::user()->id;
         switch ($request->type) {
             case 'personal':
                 $affiliate->identity_card = trim($request->identity_card);
                 if ($request->city_identity_card_id) {
                     $affiliate->city_identity_card_id = $request->city_identity_card_id;
                 } else {
                     $affiliate->city_identity_card_id = null;
                 }
                 $affiliate->last_name = trim($request->last_name);
                 $affiliate->mothers_last_name = trim($request->mothers_last_name);
                 $affiliate->first_name = trim($request->first_name);
                 $affiliate->second_name = trim($request->second_name);
                 $affiliate->surname_husband = trim($request->surname_husband);
                 $affiliate->birth_date = Util::datePick($request->birth_date);
                 $affiliate->civil_status = trim($request->civil_status);
                 if ($request->city_birth_id) {
                     $affiliate->city_birth_id = $request->city_birth_id;
                 } else {
                     $affiliate->city_birth_id = null;
                 }
                 if ($request->DateDeathAffiliateCheck == "on") {
                     $affiliate->date_death = Util::datePick($request->date_death);
                     $affiliate->reason_death = trim($request->reason_death);
                 } else {
                     $affiliate->date_death = null;
                     $affiliate->reason_death = null;
                 }
                 $affiliate->save();
                 $message = "Información personal de Afiliado actualizado con éxito";
                 break;
             case 'address':
                 if ($request->city_address_id) {
                     $affiliate->city_address_id = $request->city_address_id;
                 } else {
                     $affiliate->city_address_id = null;
                 }
                 $affiliate->zone = trim($request->zone);
                 $affiliate->street = trim($request->street);
                 $affiliate->number_address = trim($request->number_address);
                 $affiliate->phone = trim($request->phone);
                 $affiliate->cell_phone = trim($request->cell_phone);
                 $affiliate->save();
                 $message = "Información de domicilio de afiliado actualizado con éxito";
                 break;
                 Session::flash('message', $message);
         }
     }
     return redirect('affiliate/' . $affiliate->id);
 }