fails()) { return ws_response(true, Input::get('serial_std') . '-' . Input::get('serial_scy') . '-' . Input::get('serial_pym'), $validator->errors()->getMessages(), 200); } //OBJETO PAYMENT METHOD $payment_method = PaymentMethod::find($serial_pym); //TIPO DE PAGO $typePM = $payment_method->type_pym; $requires_owner_info_pym = $payment_method->requires_owner_info_pym; $requires_financial_pym = $payment_method->requires_financial_pym; $requires_credit_card_pym = $payment_method->requires_credit_card_pym; //SET STUDENT $student = new Student(); $student->serial_std = $serial_std; //INFORMACIÓN DEL NIVEL DEL STUDENT $levelInfo = $student->getStudentInfoLevel($serial_scy); if ($levelInfo) { //TOTAL DE RUBROS POR AÑO Y PAYMENT CONCEPT GROUP if ($serial_pcg) { $totalPaymentByConceptGroup = $student->totalDebtsStudentByPaymentConceptGroup($serial_scy, $levelInfo->serial_set, $levelInfo->serial_lvl, $levelInfo->serial_spt, $serial_pcg, 1); } else { $totalPaymentByConceptGroup = $student->totalDebtsStudentByPaymentConceptGroup($serial_scy, $levelInfo->serial_set, $levelInfo->serial_lvl, $levelInfo->serial_spt, 0, 1); } if (count($totalPaymentByConceptGroup) > 0) { $schoolYear = SchoolYear::find($serial_scy); $invoicesNumber = $schoolYear->invoice_number_scy; $startDate = $schoolYear->invoice_start_date_scy; list($startYear, $startMonth, $startDay) = explode("-", $startDate); $auxYear = $startYear; $startDateList = array(); $monthsList = array(); for ($i = 1; $i <= $invoicesNumber; $i++) { $startDateDebt = $startYear . '-' . $startMonth . '-' . '01'; array_push($startDateList, $startDateDebt); switch ($startMonth) { case 1: array_push($monthsList, 'Jan'); break; case 2: array_push($monthsList, 'Feb'); break; case 3: array_push($monthsList, 'Mar'); break; case 4: array_push($monthsList, 'Apr'); break; case 5: array_push($monthsList, 'May'); break; case 6: array_push($monthsList, 'Jun'); break; case 7: array_push($monthsList, 'Jul'); break; case 8: array_push($monthsList, 'Aug'); break; case 9: array_push($monthsList, 'Sep'); break; case 10: array_push($monthsList, 'Oct'); break; case 11: array_push($monthsList, 'Nov'); break; case 12: array_push($monthsList, 'Dec'); break; } $startMonth++; if ($startMonth > 12) { $startMonth = 1; $startYear++; } } foreach ($totalPaymentByConceptGroup as $totalPayment) { foreach ($monthsList as $dmonth) { $invoice = new Invoice(); $invSerialPhy = $invoice->getActiveSerialPhyByStudentAndMonth($serial_std, $dmonth, $serial_scy, $totalPayment->serial_pcg); if ($invSerialPhy) { //PAGO CON TARGETA DE CRÉDITO $data = array(); //NUEVO payment_detail $invoice = Invoice::find($invSerialPhy->serial_phy); $data['kinship_pdt'] = $kinship_pdt; $data['amount_pdt'] = $invoice->total_phy; $data['serial_phy'] = $invSerialPhy->serial_phy; $data['serial_usr'] = $serial_usr; $data['date_pdt'] = $today; $data['status_pdt'] = 'ACTIVE'; if ($serial_pym) $data['serial_pym'] = $serial_pym; if ($document_number_pdt) { $data['document_number_pdt'] = $document_number_pdt; } $data['owner_pdt'] = $owner_pdt; $data['id_owner_pdt'] = $id_owner_pdt; if (!empty($serial_fin)) $data['serial_fin'] = $serial_fin; if (!empty($serial_ccd)) { $data['serial_ccd'] = $serial_ccd; } $data['cellphone_owner_pdt'] = $cellphone_owner_pdt; $data['phone_owner_pdt'] = $phone_owner_pdt; $data['num_check_pdt'] = $num_check_pdt; $data['email_owner_pdt'] = $email_owner_pdt; $data['account_type_pdt'] = $account_type_pdt; $data['address_owner_pdt'] = $address_owner_pdt; $payment_detail = DB::table('payment_detail') ->insert($data); if ($payment_detail) { $invoice->status_phy = "PAID"; $invoice->physical_number_phy = "0000" . $auxYear; $invoice->save(); } } } } } } return ws_response(false, "OK", 'Payment Succesfull', 200); } catch (Exception $ex) { return ws_response(true, null, 'ERROR ' . $ex->getCode() . '! ' . $ex->getMessage(), 500); } } /** * Metodo para reversar pagos por estudiante * * @param integer $serial_std * @param integer $serial_scy * * @return Successful * @throws InvalidArgumentException * @since 2016-05-23 * @author Gladys Ronquillo */ public function postRevertpaymentdetail() { try { $serial_std = Input::get('serial_std'); $serial_scy = Input::get('serial_scy'); $validator = Validator::make(Input::all(), PaymentDetail::rulesRevertPaymentDetail()); if ($validator->fails()) { return ws_response(true, Input::get('serial_std') . '-' . Input::get('serial_scy'), $validator->errors()->getMessages(), 200); } //SET STUDENT $student = new Student(); $student->serial_std = $serial_std; //GET INFO LEVEL BY YEAR $levelInfo = $student->getStudentInfoLevel($serial_scy); if ($levelInfo) { //GET TOTAL DEBTS BY YEAR AND PAYMENT CONCEPT GROUP $totalPaymentByConceptGroup = $student->totalDebtsStudentByPaymentConceptGroup($serial_scy, $levelInfo->serial_set, $levelInfo->serial_lvl, $levelInfo->serial_spt, 0); if (count($totalPaymentByConceptGroup) > 0) { foreach ($totalPaymentByConceptGroup as $totalPayment) { $paymentDebts = $student->getPaymentsByDebts($serial_scy, $levelInfo->serial_set, $levelInfo->serial_lvl, $levelInfo->serial_spt, $totalPayment->serial_pcg); $serial_cdf = $paymentDebts[0]->serial_cdf; foreach ($paymentDebts as &$val) { if ($serial_cdf) { $current_defered = CurrentDeferred::find($serial_cdf); if ($current_defered->status_cdf != 'INACTIVE') { $current_defered->status_cdf = 'INACTIVE'; $current_defered->confirm_status_cdf = 'KO'; $current_defered->save(); } } else { $payment_detail = new PaymentDetail(); $payment_detail->serial_phy = $val->serial_phy; $payment_detail->paymentDetailAsInactiveBySerialPhy(); } //SET serial_cdf INTO invoice_detail InvoiceDetail::where('serial_deb', '=', $val->serial_deb) ->where('serial_phy', '=', $val->serial_phy) ->update(array( 'serial_cdf' => NULL)); //SET Invoice $invoice = Invoice::find($val->serial_phy); if ($invoice->physical_number_phy || $invoice->status_psd != 'INACTIVE') { $invoice->physical_number_phy = NULL; $invoice->status_phy = 'ACTIVE'; $invoice->save(); } } } } } return ws_response(false, "OK", 'Revert Succesfull', 200); } catch (Exception $ex) { return ws_response(true, null, 'ERROR ' . $ex->getCode() . '! ' . $ex->getMessage(), 500); } } /** * Método para reversar obtener meses en un rango de fechas * @param date $date_start , $date_end * * @return array $months * @since 29/07/2016 * @author Franklin Benalcazar */ function getMonthsInerval($date_start, $date_end) { $interval = new DateInterval('P1M'); $realEnd = new DateTime($date_end); $realEnd->add($interval); $period = new DatePeriod( new DateTime($date_start), $interval, $realEnd ); foreach ($period as $date) { $mounts[] = $date->format('M'); } return $mounts; } /** * Método para registrar pagos de un conjunto de estudiantes * * @param array $students * @param integer $serial_scy * @param integer $serial_pym * * @return Succesful * @throws InvalidArgumentException * @since 2016-05-30 * @author Gladys Ronquillo */ public function postRegistrationpaymentdetail() { try { $date_start = Input::get('date_start'); $date_end = Input::get('date_end'); $serial_usr = Input::get('serial_usr'); $today = date("Y-m-d"); $data = Input::get('students'); $arrayStd = json_decode($data); $serial_scy = Input::get('serial_scy'); //INFO MÉTODO DE PAGO $serial_pym = Input::get('serial_pym'); //INFO OPCIONAL, DEPENDE FORMA DE PAGO $document_number_pdt = Input::get('document_number_pdt'); $id_owner_pdt = Input::get('id_owner_pdt'); $cellphone_owner_pdt = Input::get('cellphone_owner_pdt'); $phone_owner_pdt = Input::get('phone_owner_pdt'); $num_check_pdt = Input::get('num_check_pdt'); $email_owner_pdt = Input::get('email_owner_pdt'); $account_type_pdt = Input::get('account_type_pdt'); $address_owner_pdt = Input::get('address_owner_pdt'); $kinship_pdt = Input::get('kinship_pdt'); $owner_pdt = Input::get('owner_pdt'); $city_pdt = Input::get('city_pdt'); //INFO INSTITUCIÓN FINANCIERA $serial_fin = Input::get('serial_fin'); //INFO CREDIT CARD $serial_ccd = Input::get('serial_ccd'); //year expire credit card $date_year_expire = Input::get('date_expire_year'); //month expire credit card $date_month_expire = Input::get('date_expire_month'); $validator = Validator::make(Input::all(), PaymentDetail::rulesRegistrationPaymentDetail()); if ($validator->fails()) { return ws_response(true, Input::get('students') . '-' . Input::get('serial_scy') . '-' . Input::get('serial_pym'), $validator->errors()->getMessages(), 200); } //OBJETO PAYMENT METHOD $payment_method = PaymentMethod::find($serial_pym); //TIPO DE PAGO $typePM = $payment_method->type_pym; $requires_owner_info_pym = $payment_method->requires_owner_info_pym; $requires_financial_pym = $payment_method->requires_financial_pym; $requires_credit_card_pym = $payment_method->requires_credit_card_pym; //RECORRER ARREGLO DE ESTUDIANTES RECIBIDOS foreach ($arrayStd as &$std) { foreach ($std->payments as &$payment) { //SET STUDENT $student = new Student(); $student->serial_std = $std->serial_std; //INFORMACIÓN DEL NIVEL DEL STUDENT $levelInfo = $student->getStudentInfoLevel($serial_scy); if ($levelInfo) { //TOTAL DE RUBROS POR AÑO Y PAYMENT CONCEPT GROUP $totalPaymentByConceptGroup = $student->totalDebtsStudentByPaymentConceptGroup($serial_scy, $levelInfo->serial_set, $levelInfo->serial_lvl, $levelInfo->serial_spt, $payment->serial_pcg, 1); if (count($totalPaymentByConceptGroup) > 0) { $schoolYear = SchoolYear::find($serial_scy); $invoicesNumber = $schoolYear->invoice_number_scy; $startDate = $schoolYear->invoice_start_date_scy; list($startYear, $startMonth, $startDay) = explode("-", $startDate); $auxYear = $startYear; $startDateList = array(); if (!empty($date_start)) { $monthsList = $this->getMonthsInerval($date_start, $date_end); } else { $monthsList = array(); } if (count($monthsList) > 0) { foreach ($monthsList as $month) { $startDateDebt = $startYear . '-' . $startMonth . '-' . '01'; array_push($startDateList, $startDateDebt); } } else { for ($i = 1; $i <= $invoicesNumber; $i++) { $startDateDebt = $startYear . '-' . $startMonth . '-' . '01'; array_push($startDateList, $startDateDebt); switch ($startMonth) { case 1: array_push($monthsList, 'Jan'); break; case 2: array_push($monthsList, 'Feb'); break; case 3: array_push($monthsList, 'Mar'); break; case 4: array_push($monthsList, 'Apr'); break; case 5: array_push($monthsList, 'May'); break; case 6: array_push($monthsList, 'Jun'); break; case 7: array_push($monthsList, 'Jul'); break; case 8: array_push($monthsList, 'Aug'); break; case 9: array_push($monthsList, 'Sep'); break; case 10: array_push($monthsList, 'Oct'); break; case 11: array_push($monthsList, 'Nov'); break; case 12: array_push($monthsList, 'Dec'); break; } $startMonth++; if ($startMonth > 12) { $startMonth = 1; $startYear++; } } } foreach ($totalPaymentByConceptGroup as $totalPayment) { foreach ($monthsList as $dmonth) { $invoice = new Invoice(); $invSerialPhy = $invoice->getActiveSerialPhyByStudentAndMonth($std->serial_std, $dmonth, $serial_scy, $totalPayment->serial_pcg); if ($invSerialPhy) { //PAGO CON TARGETA DE CRÉDITO $data = array(); //NUEVO payment_detail $invoice = Invoice::find($invSerialPhy->serial_phy); if ($kinship_pdt) $data['kinship_pdt'] = $kinship_pdt; $data['amount_pdt'] = $invoice->total_phy; $data['serial_phy'] = $invSerialPhy->serial_phy; $data['serial_usr'] = $serial_usr; $data['date_pdt'] = $today; $data['status_pdt'] = 'ACTIVE'; $data['serial_pym'] = $serial_pym; if ($document_number_pdt) { $data['document_number_pdt'] = $document_number_pdt; } if ($date_year_expire) $data['date_year_expire_pdt'] = $date_year_expire; if ($date_month_expire) $data['date_month_expire_pdt'] = $date_month_expire; if ($owner_pdt) $data['owner_pdt'] = $owner_pdt; if ($id_owner_pdt) $data['id_owner_pdt'] = $id_owner_pdt; if ($serial_fin) $data['serial_fin'] = $serial_fin; if ($serial_ccd) $data['serial_ccd'] = $serial_ccd; if ($cellphone_owner_pdt) $data['cellphone_owner_pdt'] = $cellphone_owner_pdt; if ($phone_owner_pdt) $data['phone_owner_pdt'] = $phone_owner_pdt; if ($num_check_pdt) $data['num_check_pdt'] = $num_check_pdt; if ($email_owner_pdt) $data['email_owner_pdt'] = $email_owner_pdt; if ($account_type_pdt) $data['account_type_pdt'] = $account_type_pdt; if ($address_owner_pdt) $data['address_owner_pdt'] = $address_owner_pdt; if ($city_pdt) $data['city_pdt'] = $city_pdt; $payment_detail = DB::table('payment_detail') ->insert($data); if ($payment_detail) { $invoice->status_phy = "PAID"; $invoice->physical_number_phy = "0000" . $auxYear; $invoice->save(); } } } } } } }//fin foreach group payment concept }//fin foreach students return ws_response(false, "OK", 'Payment Succesfull', 200); } catch (Exception $ex) { return ws_response(true, null, 'ERROR ' . $ex->getCode() . '! ' . $ex->getMessage(), 500); } } /** * Método para reversar pagos por arreglo de estudiantes * * @param array $students * @param integer $serial_scy * * @return Successful * @throws InvalidArgumentException * @since 2016-06-01 * @author Gladys Ronquillo */ public function postRevertpayments() { try { $data = Input::get('students'); $arrayStd = json_decode($data); $serial_scy = Input::get('serial_scy'); $date_start = Input::get('date_start') . '-01'; $date_end = Input::get('date_end') . '-10'; $validator = Validator::make(Input::all(), PaymentDetail::rulesRevertPayments()); if ($validator->fails()) { return ws_response(true, Input::get('students') . '-' . Input::get('serial_scy'), $validator->errors()->getMessages(), 200); } //RECORRER ARREGLO DE ESTUDIANTES RECIBIDOS foreach ($arrayStd as $std) { //SET STUDENT $student = new Student(); $student->serial_std = $std->serial_std; //GET INFO LEVEL BY YEAR $levelInfo = $student->getStudentInfoLevel($serial_scy); if ($levelInfo) { //GET TOTAL DEBTS BY YEAR AND PAYMENT CONCEPT GROUP //aqui foreach de grupo de rubros foreach ($std->payments as &$payment) { $totalPaymentByConceptGroup = $student->totalDebtsStudentByPaymentConceptGroup($serial_scy, $levelInfo->serial_set, $levelInfo->serial_lvl, $levelInfo->serial_spt, $payment->serial_pcg, 0, $date_start, $date_end); // return json_encode($totalPaymentByConceptGroup); if (count($totalPaymentByConceptGroup) > 0) { foreach ($totalPaymentByConceptGroup as $totalPayment) { $paymentDebts = $student->getPaymentsByDebts($serial_scy, $levelInfo->serial_set, $levelInfo->serial_lvl, $levelInfo->serial_spt, $totalPayment->serial_pcg, $date_start, $date_end); $serial_cdf = $paymentDebts[0]->serial_cdf; foreach ($paymentDebts as &$val) { if ($serial_cdf) { $current_defered = CurrentDeferred::find($serial_cdf); if ($current_defered->status_cdf != 'INACTIVE') { $current_defered->status_cdf = 'INACTIVE'; $current_defered->confirm_status_cdf = 'KO'; $current_defered->save(); } } else { $payment_detail = new PaymentDetail(); $payment_detail->serial_phy = $val->serial_phy; $payment_detail->paymentDetailAsInactiveBySerialPhy(); } //SET serial_cdf INTO invoice_detail InvoiceDetail::where('serial_deb', '=', $val->serial_deb) ->where('serial_phy', '=', $val->serial_phy) ->update(array( 'serial_cdf' => NULL)); //SET Invoice $invoice = Invoice::find($val->serial_phy); if ($invoice->physical_number_phy || $invoice->status_psd != 'INACTIVE') { $invoice->physical_number_phy = NULL; $invoice->status_phy = 'ACTIVE'; $invoice->save(); } } } } } } } return ws_response(false, "OK", 'Revert Succesfull', 200); } catch (Exception $ex) { return ws_response(true, null, 'ERROR ' . $ex->getCode() . '! ' . $ex->getMessage(), 500); } } }