#php #mysql #laravel #phpmyadmin #laravel-5.2
#php #mysql #laravel #phpmyadmin #laravel-5
Вопрос:
У меня есть две модели, Payment и GroupStarts.
Платеж содержит следующие поля:
идентификатор студента, сумма к оплате, оплата студента, дата оплаты, дата получения, имя_группы
В GroupStarts есть:
имя_группы, group_start, group_end, group_status.
Вот как это должно работать:
Если платеж произведен за один месяц и срок его действия истекает после месяца 1, к нему следует добавить amount_to_pay за месяц 1, и если во 2-м месяце студент ничего не заплатил, мы добавляем сумму к оплате, аналогично: если студент должен заплатить 10 долларов и заплатил, так что долг равен 0, но в следующем месяце он не заплатил, поэтому мы добавляем его к платежу 10 долларов, если в 3-м месяце он не заплатил, мы добавляем еще 10 долларов к этой сумме.
Как я могу это сделать?
Это код, который я пробовал:
private function getMonthlyUnpayments()
{
$payments = Payment::all();
$unpayment = 0;
$totalPayment = 0;
foreach ($payments as $key => $value) {
$unpayment = $value->amount_to_pay;
$totalPayment = $value->student_paid;
}
$studentsAllU = Student::where('is_canceled', '=', 0)->get();
$groupAllU = Gstart::where('group_status', '=', 0)->get();
$studentGroupAllU = [];
foreach ($studentsAllU as $key => $value) {
foreach ($groupAllU as $keys => $valu) {
foreach ($value->payment as $paymentID) {
if ($value->group_id == $valu->group_name) {
$studentGroupAllU[] = ['name' => $value->full_name, 'student_id' => $value->id, 'gr_id' => $value->group_id, 'paid' => $paymentID->student_paid, 'to_pay' => $paymentID->amount_to_pay, 'due_date' => $paymentID->due_date, 'group_ends' => $valu->group_end];
}
}
}
}
function nb_mois($from, $to)
{
$fromYear = date("Y", strtotime($from));
$fromMonth = date("m", strtotime($from));
$toYear = date("Y", strtotime($to));
$toMonth = date("m", strtotime($to));
if ($fromYear == $toYear) {
return ($toMonth-$fromMonth) 1;
} else {
return (12-$fromMonth) 1 $toMonth;
}
}
function createDateRangeArray($strDateFrom,$strDateTo)
{
$aryRange=array();
$iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2), substr($strDateFrom,8,2),substr($strDateFrom,0,4));
$iDateTo=mktime(1,0,0,substr($strDateTo,5,2), substr($strDateTo,8,2),substr($strDateTo,0,4));
if ($iDateTo>=$iDateFrom)
{
array_push($aryRange,date('Y-m-d',$iDateFrom));
while ($iDateFrom<$iDateTo)
{
$iDateFrom =86400;
array_push($aryRange,date('Y-m-d',$iDateFrom));
}
}
return $aryRange;
}
$dtArr = [];
$incrementer = 0;
$inc = 0;
foreach ($studentGroupAllU as $key => $value) {
if ($value['group_ends'] >= $value['due_date'] || $value['paid'] < $value['to_pay']) {
if ($value['paid'] < $value['to_pay']) {
$incrementer = ($value['to_pay'] - $value['paid']);
}
else {
$incrementer = ($value['to_pay']);
}
$dtArr[] = ['days_left' => count(createDateRangeArray($value['due_date'], $value['group_ends'])), 'group_id_d' => $value['gr_id'], 'paid' => $value['paid'], 'to_pay' => $value['to_pay'], 'student_id' => $value['student_id'], 'owe' => ($inc =($value['to_pay'] - $value['paid'])), 'dates' => createDateRangeArray($value['due_date'], $value['group_ends']),'dates_fron_last_payment' => createDateRangeArray($value['due_date'], Carbon::now()->format('Y-m-d')), 'days_fron_last_payments' => count(createDateRangeArray($value['due_date'], Carbon::now()->format('Y-m-d')))];
}
$inc = 0;
}
function uniqueAssocArray($array, $uniqueKey) {
$arr = array();
foreach($array as $key => $item)
{
$arr[$item[$uniqueKey]][$key] = $item;
}
ksort($arr, SORT_NUMERIC);
return $arr;
}
$dd = uniqueAssocArray($dtArr, 'group_id_d');
$tpStudentGr = 0;
// dd($dtArr);
foreach ($dtArr as $key => $value) {
foreach ($value['dates'] as $k => $val) {
if ($val == Carbon::createFromFormat('Y-m-d', $val)->startOfMonth()->format('Y-m-d') amp;amp; $val <= Carbon::now()->startOfMonth()->format('Y-m-d')) {
if ($value['paid'] < $value['to_pay']){
$tpStudentGr = ($value['to_pay'] - $value['paid'] $value['to_pay']);
}
if ($value['paid'] == $value['to_pay']){
$tpStudentGr = $value['to_pay'];
}
}
}
if ($value['days_left'] > 0) {
}
}
$tpStudentGr = $unpayment - $totalPayment;
return $tpStudentGr;
}
Комментарии:
1. В чем именно проблема, с которой вы столкнулись в написанном вами коде.
2. Вы спрашиваете: «как я могу это сделать?» SO — это не место, где можно просить людей написать код для вас, это место, где можно получить помощь с проблемами, возникающими при написании кода. Для этого предоставьте нам ошибки, которые встречаются в вашем текущем коде, и мы объясним вам, почему вы получаете эти ошибки.
3. Проблема в том, что когда я хочу получить, например, общую сумму задолженности за два месяца истечения срока действия, это похоже на дублирующуюся сумму.