Перейти к содержимому


Партнерская программа Kredov

Таблица записи на прием.

#11 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8
0

Отправлено 02 Апрель 2011 - 16:39

gaaarfild, давай, будем ждать.
  • 0

#12 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 04 Апрель 2011 - 19:20

После внесения некоторых изменений и исправлений теперь это выглядит вот так и работает хорошо.
И крайне благодарен за идею с многомерными массивами. =)
function Schedule() {
global $db, $prefix, $config, $templ, $users_class, $texts_class;
$this->menu();
$templ->page_title = 'Запись на прием - Таблица приема';
$templ->page_head_title = 'Запись на прием » Таблица приема';
if(isset($_GET["date"]))
{
$year = (int)substr($_GET['date'], 0, 4);
$month = (int)substr($_GET['date'], 4, 2);
$day = (int)substr($_GET['date'], 6, 2);
}
else // иначе выводить текущие месяц и год
{
$day = date('d', mktime(0,0,0,date('m'),date('d'),date('Y')));
$month = date('m', mktime(0,0,0,date('m'),date('d'),date('Y')));
$year = date('Y', mktime(0,0,0,date('m'),date('d'),date('Y')));
}

$result = $db->sql_query("SELECT a.id, a.name, a.surname, b.title FROM ".$prefix."_users a, ".$prefix."_user_posts b WHERE a.post=b.id AND b.doctor=1 AND a.arch!=1 ORDER BY a.surname ASC");
$count = $db->sql_numrows();
echo '<div style="width: 447px;" id="tools_panel">
&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="index.php?mod=appointments&do=Schedule&date='.date("Ymd", mktime(0,0,0,$month,$day-1,$year)).'">«</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="index.php?mod=appointments&do=Schedule">Сегодня</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="index.php?mod=appointments&do=Schedule&date='.date("Ymd", mktime(0,0,0,$month,$day+1,$year)).'">»</a></b>&nbsp;&nbsp;&nbsp;&nbsp;<b>Дата:</b> <u>'.$texts_class->date2rus(date('d F Y', mktime(0,0,0,$month,$day,$year))).'</u>&nbsp;&nbsp;&nbsp;&nbsp;<b>'.$texts_class->day2rus(date('l', mktime(0,0,0,$month,$day,$year))).'</b>
</div>';
while(list($id, $first_name, $second_name, $user_post) = $db->sql_fetchrow($result)) {
$doctors[$id] = array(
'info' => array('id' => $id, 'first_name' => $first_name, 'second_name' => $second_name, 'user_post' => $user_post),
'appointments' => array()
);
}

$result2 = $db->sql_query("SELECT pa.patient_id, pa.doctor_id, pa.start_time, pa.end_time, pa.status, p.second_name, wt.title FROM ".$prefix."_patients_appointment pa, ".$prefix."_patients p, ".$prefix."_work_types wt WHERE pa.patient_id=p.id AND pa.work_type=wt.id AND (pa.start_time BETWEEN ".mktime(1,1,1,$month,$day,$year)." AND ".mktime(0,0,0,$month,$day+1,$year).") ORDER BY pa.start_time ASC");
while(list($pat_id, $doc_id, $start_time, $end_time, $status, $pac_name, $work_type) = $db->sql_fetchrow($result2)) {
$doctors[$doc_id]['appointments']['pat_id'] = $pat_id;
$doctors[$doc_id]['appointments']['doc_id'] = $doc_id;
$doctors[$doc_id]['appointments']['start_time'] = $start_time+0;
$doctors[$doc_id]['appointments']['end_time'] = $end_time+0;
$doctors[$doc_id]['appointments']['status'] = $status;
$doctors[$doc_id]['appointments']['pac_name'] = $pac_name;
$doctors[$doc_id]['appointments']['work_type'] = $work_type;
}
foreach($doctors as $doctor)
{
$first_ch_name = $texts_class->short_text($doctor['info']['first_name'], 1);
$name_doctor = $doctor['info']['second_name'].' '.$first_ch_name.'.';

echo '<table border="0" cellpadding="0" cellspacing="1" style="float: left;" class="schedule_table">
<tr>
<th colspan="2">
'.$name_doctor.'<br /><span style="font-weight: normal;font-size: 10px;">'. $doctor['info']['user_post'] .'</span>
</th>
</tr>';

$hours = 8;
$minuts = 0;

while( $hours != 23 )
{

$time_interval = mktime($hours, $minuts, 1, $month, $day, $year); // время для сравнения направлений

$display_hours = ( $hours < 10 ) ? "0{$hours}" : $hours; // выводимые часы
$display_minuts = ( $minuts == 0 ) ? "0{$minuts}" : $minuts; // выводимые минуты
$display_date_with_sec = date('H:i:s d.m.Y', mktime($hours, $minuts, 0, $month, $day, $year));
$display_date_without_sec = date('H:i d.m.Y', mktime($hours, $minuts, 1, $month, $day, $year));
$display_time = mktime($hours, $minuts, 1, $month, $day, $year);
$onclick = 'show_dialog_ajax_t("#appoint_block", "mod=appointments&do=add_appoint&doctor='.$doctor['info']['id'].'&time='.$display_time.'", "Запись на прием '.$display_date_without_sec.'");';
//$onclick = "";
$class_aliquot = ( $minuts == 0 ) ? " aliquot" : "";

// вывод направлений
echo '<tr>
<td class="date_standart'.$class_aliquot.'">
'.$display_hours.':'.$display_minuts.'
</td>
';
if(count($doctor['appointments']))
{

if(intval($doctor['appointments']['start_time']) <= $time_interval && intval($doctor['appointments']['end_time']) >= $time_interval)
{

echo '<td class="pacient_standart'.$class_aliquot.'" style="background: #ffff66;font-weight: normal;" title="'.$display_date_with_sec.'" onclick=\''.$onclick.'\' >';
if(!isset($check[$doctor['appointments']['pat_id']])){echo $doctor['appointments']['pac_name'];}
echo '</td>';
$check[$doctor['appointments']['pat_id']] = 1;
} else {
echo '<td class="pacient_standart'.$class_aliquot.'" title="'.$display_date_with_sec.'" onclick=\''.$onclick.'\' >';
echo "&nbsp;</td>";
}
} else {
echo '<td class="pacient_standart'.$class_aliquot.'" title="'.$display_date_with_sec.'" onclick=\''.$onclick.'\' ></td>';
}
echo '</tr>';


// обработка времени
$minuts += 15;
if( $minuts == 60 )
{
$hours += 1;
$minuts = 0;
}
}

echo '</table>';
}

echo '<div class="clear"></div><div id="appoint_block"></div>';
}

  • 0

#13 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 05 Апрель 2011 - 07:06

А нет. И тут ошибочки.
  • 0

#14 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 06 Апрель 2011 - 15:37

gaaarfild, всегда пожалуйста :D
Поправь свой предыдущий пост и тему я так понимаю, можно закрывать?!
  • 0

#15 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 06 Апрель 2011 - 19:38

Нет. Рано еще закрывать. Ошибка есть. Голову сломал уже.
Последний foreach вытаскивает перые буквы содержимого массива appointments.
И на одного доктора отображается только один пациент в день. Даже если больше добавить.
  • 0

#16 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 06 Апрель 2011 - 20:03

gaaarfild, правильность формировки массива проверил? Формирует с той структурой, что я указал? Все ли записи туда заносятся?
  • 0

#17 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 07 Апрель 2011 - 17:19

Отображает только одного пациента на число. Остальных не показывает.

function Schedule() {
global $db, $prefix, $config, $templ, $users_class, $texts_class;
$templ->add_script = '<script type="text/javascript" src="includes/javascript/jquery.autocomplete.js"></script>
<script type="text/javascript" src="includes/javascript/jquery.timepicker.js"></script>';
$templ->add_css = '<link href="'.__TPL.'/css/autocomplete.css" rel="stylesheet" type="text/css" />
<link href="'.__CSS.'/timepicker.css" media="print" type="text/css" rel="stylesheet">';
$this->menu();
$templ->page_title = 'Запись на прием - Таблица приема';
$templ->page_head_title = 'Запись на прием » Таблица приема';
if(isset($_GET["date"]))
{
$year = (int)substr($_GET['date'], 0, 4);
$month = (int)substr($_GET['date'], 4, 2);
$day = (int)substr($_GET['date'], 6, 2);
}
else // иначе выводить текущие месяц и год
{
$day = date('d', mktime(0,0,0,date('m'),date('d'),date('Y')));
$month = date('m', mktime(0,0,0,date('m'),date('d'),date('Y')));
$year = date('Y', mktime(0,0,0,date('m'),date('d'),date('Y')));
}

$result = $db->sql_query("SELECT a.id, a.name, a.surname, b.title FROM ".$prefix."_users a, ".$prefix."_user_posts b WHERE a.post=b.id AND b.doctor=1 AND a.arch!=1 ORDER BY a.surname ASC");
$count = $db->sql_numrows();
echo '<div style="width: 447px;" id="tools_panel">
&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="index.php?mod=appointments&do=Schedule&date='.date("Ymd", mktime(0,0,0,$month,$day-1,$year)).'">«</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="index.php?mod=appointments&do=Schedule">Сегодня</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="index.php?mod=appointments&do=Schedule&date='.date("Ymd", mktime(0,0,0,$month,$day+1,$year)).'">»</a></b>&nbsp;&nbsp;&nbsp;&nbsp;<b>Дата:</b> <u>'.$texts_class->date2rus(date('d F Y', mktime(0,0,0,$month,$day,$year))).'</u>&nbsp;&nbsp;&nbsp;&nbsp;<b>'.$texts_class->day2rus(date('l', mktime(0,0,0,$month,$day,$year))).'</b>
</div>';
while(list($id, $first_name, $second_name, $user_post) = $db->sql_fetchrow($result)) {
$doctors[$id] = array(
'info' => array('id' => $id, 'first_name' => $first_name, 'second_name' => $second_name, 'user_post' => $user_post),
'appointments' => array()
);
}

$result2 = $db->sql_query("SELECT pa.id, pa.patient_id, pa.doctor_id, pa.start_time, pa.end_time, pa.status, p.second_name, wt.title FROM ".$prefix."_patients_appointment pa, ".$prefix."_patients p, ".$prefix."_work_types wt WHERE pa.patient_id=p.id AND pa.work_type=wt.id AND (pa.start_time BETWEEN ".mktime(0,0,0,$month,$day,$year)." AND ".mktime(0,0,0,$month,$day+1,$year).") ORDER BY pa.start_time ASC");
while(list($app_id, $pat_id, $doc_id, $start_time, $end_time, $status, $pat_name, $work_type) = $db->sql_fetchrow($result2))
{
$doctors[$doc_id]['appointments'][$app_id] = array(
'app_id' => $app_id,
'pat_id' => $pat_id,
'doc_id' => $doc_id,
'start_time' => $start_time+0,
'end_time' => $end_time+0,
'status' => $status,
'pat_name' => $pat_name,
'work_type' => $work_type
);
}
echo '<pre>';
print_r($doctors);
echo '</pre>';
foreach($doctors as $doctor)
{
$first_ch_name = $texts_class->short_text($doctor['info']['first_name'], 1);
$name_doctor = $doctor['info']['second_name'].' '.$first_ch_name.'.';

echo '<table border="0" cellpadding="0" cellspacing="1" style="float: left;" class="schedule_table">
<tr>
<th colspan="2">
'.$name_doctor.'<br /><span style="font-weight: normal;font-size: 10px;">'. $doctor['info']['user_post'] .'</span>
</th>
</tr>';

$hours = 8;
$minuts = 0;

while( $hours != 23 )
{

$time_interval = mktime($hours, $minuts, 1, $month, $day, $year); // время для сравнения направлений

$display_hours = ( $hours < 10 ) ? "0{$hours}" : $hours; // выводимые часы
$display_minuts = ( $minuts == 0 ) ? "0{$minuts}" : $minuts; // выводимые минуты
$display_date_with_sec = date('H:i:s d.m.Y', mktime($hours, $minuts, 0, $month, $day, $year));
$display_date_without_sec = date('H:i d.m.Y', mktime($hours, $minuts, 1, $month, $day, $year));
$display_time = mktime($hours, $minuts, 1, $month, $day, $year);
$onclick = 'show_dialog_ajax_t("#appoint_block", "mod=appointments&do=add_appoint&doctor='.$doctor['info']['id'].'&time='.$display_time.'", "Запись на прием '.$display_date_without_sec.'");';
//$onclick = "";
$class_aliquot = ( $minuts == 0 ) ? " aliquot" : "";

// вывод направлений
echo '<tr>
<td class="date_standart'.$class_aliquot.'">
'.$display_hours.':'.$display_minuts.'
</td>
';
echo '<td class="pacient_standart'.$class_aliquot.'" style="font-weight: normal;" title="'.$display_date_with_sec.'" onclick=\''.$onclick.'\' >';
//if(count($doctor['appointments'])) {
foreach($doctor['appointments'] AS $aid => $appoint)
{
if(intval($appoint['start_time']) <= $time_interval && intval($appoint['end_time']) >= $time_interval)
{
echo '<div style="background: #ffff66;margin-left: -3px;padding-left: 3px;margin-right: -3px;">';
if(!isset($check[$appoint['app_id']]))
{
//echo $texts_class->short_text($appoint['pat_name'], 13, '..');

}
$check[$appoint['app_id']] = 1;
echo ' -- '.$appoint['app_id'];
echo '&nbsp;</div>';
}
}
//}
echo '</td>';
echo '</tr>';


// обработка времени
$minuts += 15;
if( $minuts == 60 )
{
$hours += 1;
$minuts = 0;
}
}

echo '</table>';
}

echo '<div class="clear"></div><div id="appoint_block"></div>';
}
}

  • 0


Оформление форума – IPBSkins.ru