You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
514 lines
20 KiB
514 lines
20 KiB
2 years ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* Holds library functions used by events
|
||
|
* @package OpenEMR
|
||
|
* @link https://www.open-emr.org
|
||
|
* @author Z&H Consultancy Services Private Limited <sam@zhservices.com>
|
||
|
* @author Eldho Chacko <eldho@zhservices.com>
|
||
|
* @author Paul Simon K <paul@zhservices.com>
|
||
|
* @author Ian Jardine ( github.com/epsdky ) ( Modified calendar_arrived )
|
||
|
* @copyright Copyright (c) 2010 Z&H Consultancy Services Private Limited <sam@zhservices.com>
|
||
|
* @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
|
||
|
*/
|
||
|
|
||
|
require_once(__DIR__ . '/calendar.inc');
|
||
|
require_once(__DIR__ . '/patient_tracker.inc.php');
|
||
|
|
||
|
//===============================================================================
|
||
|
//This section handles the events of payment screen.
|
||
|
//===============================================================================
|
||
|
define('REPEAT_EVERY_DAY', 0);
|
||
|
define('REPEAT_EVERY_WEEK', 1);
|
||
|
define('REPEAT_EVERY_MONTH', 2);
|
||
|
define('REPEAT_EVERY_YEAR', 3);
|
||
|
define('REPEAT_EVERY_WORK_DAY', 4);
|
||
|
define('REPEAT_DAYS_EVERY_WEEK', 6);
|
||
|
//===============================================================================
|
||
|
$today = date('Y-m-d');
|
||
|
//===============================================================================
|
||
|
// If unique current date appointment found update status to arrived and create
|
||
|
// encounter
|
||
|
//
|
||
|
function calendar_arrived($form_pid)
|
||
|
{
|
||
|
$appts = array();
|
||
|
$today = date('Y-m-d');
|
||
|
$appts = fetchAppointments($today, $today, $form_pid);
|
||
|
$appt_count = count($appts); //
|
||
|
if ($appt_count == 0) {
|
||
|
echo "<br /><br /><br /><h2 class='text-center'>" . htmlspecialchars(xl('Sorry No Appointment is Fixed'), ENT_QUOTES) . ". " . htmlspecialchars(xl('No Encounter could be created'), ENT_QUOTES) . ".</h2>";
|
||
|
exit;
|
||
|
} elseif ($appt_count == 1) {
|
||
|
$enc = todaysEncounterCheck($form_pid);
|
||
|
if ($appts[0]['pc_recurrtype'] == 0) {
|
||
|
sqlStatement("UPDATE openemr_postcalendar_events SET pc_apptstatus = '@' WHERE pc_eid = ?", array($appts[0]['pc_eid']));
|
||
|
} else {
|
||
|
update_event($appts[0]['pc_eid']);
|
||
|
}
|
||
|
} elseif ($appt_count > 1) {
|
||
|
echo "<br /><br /><br /><h2 class='text-center'>" . htmlspecialchars(xl('More than one appointment was found'), ENT_QUOTES) . ". " . htmlspecialchars(xl('No Encounter could be created'), ENT_QUOTES) . ".</h2>";
|
||
|
exit;
|
||
|
}
|
||
|
return $enc;
|
||
|
}
|
||
|
//
|
||
|
//===============================================================================
|
||
|
// Checks for the patient's encounter ID for today, creating it if there is none.
|
||
|
//
|
||
|
function todaysEncounterCheck($patient_id, $enc_date = '', $reason = '', $fac_id = '', $billing_fac = '', $provider = '', $cat = '', $return_existing = true)
|
||
|
{
|
||
|
global $today;
|
||
|
$encounter = todaysEncounterIf($patient_id);
|
||
|
if ($encounter && (int)$GLOBALS['auto_create_new_encounters'] !== 2) {
|
||
|
if ($return_existing) {
|
||
|
return $encounter;
|
||
|
} else {
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (is_array($provider)) {
|
||
|
$visit_provider = (int)$provider[0];
|
||
|
} elseif ($provider) {
|
||
|
$visit_provider = (int)$provider;
|
||
|
} else {
|
||
|
$visit_provider = '(NULL)';
|
||
|
}
|
||
|
|
||
|
$dos = $enc_date ? $enc_date : $today;
|
||
|
$visit_reason = $reason ? $reason : xl('Please indicate visit reason');
|
||
|
$tmprow = sqlQuery("SELECT username, facility, facility_id FROM users WHERE id = ?", array($_SESSION["authUserID"]));
|
||
|
$username = $tmprow['username'];
|
||
|
$facility = $tmprow['facility'];
|
||
|
$facility_id = $fac_id ? (int)$fac_id : $tmprow['facility_id'];
|
||
|
$billing_facility = $billing_fac ? (int)$billing_fac : $tmprow['facility_id'];
|
||
|
$pos_code = sqlQuery("SELECT pos_code FROM facility WHERE id = ?", array($facility_id))['pos_code'];
|
||
|
$visit_cat = $cat ? $cat : '(NULL)';
|
||
|
$conn = $GLOBALS['adodb']['db'];
|
||
|
$encounter = $conn->GenID("sequences");
|
||
|
addForm(
|
||
|
$encounter,
|
||
|
"New Patient Encounter",
|
||
|
sqlInsert(
|
||
|
"INSERT INTO form_encounter SET " .
|
||
|
"date = ?, " .
|
||
|
"reason = ?, " .
|
||
|
"facility = ?, " .
|
||
|
"facility_id = ?, " .
|
||
|
"billing_facility = ?, " .
|
||
|
"provider_id = ?, " .
|
||
|
"pid = ?, " .
|
||
|
"encounter = ?," .
|
||
|
"pc_catid = ?," .
|
||
|
"pos_code = ?",
|
||
|
array($dos,$visit_reason,$facility,$facility_id,$billing_facility,$visit_provider,$patient_id,$encounter,$visit_cat, $pos_code)
|
||
|
),
|
||
|
"newpatient",
|
||
|
$patient_id,
|
||
|
"1",
|
||
|
"NOW()",
|
||
|
$username
|
||
|
);
|
||
|
return $encounter;
|
||
|
}
|
||
|
|
||
|
//===============================================================================
|
||
|
// Checks for the group's encounter ID for today, creating it if there is none.
|
||
|
//
|
||
|
function todaysTherapyGroupEncounterCheck($group_id, $enc_date = '', $reason = '', $fac_id = '', $billing_fac = '', $provider = '', $cat = '', $return_existing = true, $eid = null)
|
||
|
{
|
||
|
global $today;
|
||
|
$encounter = todaysTherapyGroupEncounterIf($group_id);
|
||
|
if ($encounter) {
|
||
|
if ($return_existing) {
|
||
|
return $encounter;
|
||
|
} else {
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (is_array($provider)) {
|
||
|
$visit_provider = (int)$provider[0];
|
||
|
$counselors = implode(',', $provider);
|
||
|
} elseif ($provider) {
|
||
|
$visit_provider = $counselors = (int)$provider;
|
||
|
} else {
|
||
|
$visit_provider = $counselors = null;
|
||
|
}
|
||
|
|
||
|
$dos = $enc_date ? $enc_date : $today;
|
||
|
$visit_reason = $reason ? $reason : xl('Please indicate visit reason');
|
||
|
$tmprow = sqlQuery("SELECT username, facility, facility_id FROM users WHERE id = ?", array($_SESSION["authUserID"]));
|
||
|
$username = $tmprow['username'];
|
||
|
$facility = $tmprow['facility'];
|
||
|
$facility_id = $fac_id ? (int)$fac_id : $tmprow['facility_id'];
|
||
|
$billing_facility = $billing_fac ? (int)$billing_fac : $tmprow['facility_id'];
|
||
|
$visit_cat = $cat ? $cat : '(NULL)';
|
||
|
$conn = $GLOBALS['adodb']['db'];
|
||
|
$encounter = $conn->GenID("sequences");
|
||
|
addForm(
|
||
|
$encounter,
|
||
|
"New Therapy Group Encounter",
|
||
|
sqlInsert(
|
||
|
"INSERT INTO form_groups_encounter SET " .
|
||
|
"date = ?, " .
|
||
|
"reason = ?, " .
|
||
|
"facility = ?, " .
|
||
|
"facility_id = ?, " .
|
||
|
"billing_facility = ?, " .
|
||
|
"provider_id = ?, " .
|
||
|
"group_id = ?, " .
|
||
|
"encounter = ?," .
|
||
|
"pc_catid = ? ," .
|
||
|
"appt_id = ? ," .
|
||
|
"counselors = ? ",
|
||
|
array($dos,$visit_reason,$facility,$facility_id,$billing_facility,$visit_provider,$group_id,$encounter,$visit_cat, $eid, $counselors)
|
||
|
),
|
||
|
"newGroupEncounter",
|
||
|
null,
|
||
|
"1",
|
||
|
"NOW()",
|
||
|
$username,
|
||
|
"",
|
||
|
$group_id
|
||
|
);
|
||
|
return $encounter;
|
||
|
}
|
||
|
//===============================================================================
|
||
|
// Get the patient's encounter ID for today, if it exists.
|
||
|
// In the case of more than one encounter today, pick the last one.
|
||
|
//
|
||
|
function todaysEncounterIf($patient_id)
|
||
|
{
|
||
|
global $today;
|
||
|
$tmprow = sqlQuery("SELECT encounter FROM form_encounter WHERE " .
|
||
|
"pid = ? AND date = ? " .
|
||
|
"ORDER BY encounter DESC LIMIT 1", array($patient_id,"$today 00:00:00"));
|
||
|
return empty($tmprow['encounter']) ? 0 : $tmprow['encounter'];
|
||
|
}
|
||
|
//===============================================================================
|
||
|
// Get the group's encounter ID for today, if it exists.
|
||
|
// In the case of more than one encounter today, pick the last one.
|
||
|
//
|
||
|
function todaysTherapyGroupEncounterIf($group_id)
|
||
|
{
|
||
|
global $today;
|
||
|
$tmprow = sqlQuery("SELECT encounter FROM form_groups_encounter WHERE " .
|
||
|
"group_id = ? AND date = ? " .
|
||
|
"ORDER BY encounter DESC LIMIT 1", array($group_id,"$today 00:00:00"));
|
||
|
return empty($tmprow['encounter']) ? 0 : $tmprow['encounter'];
|
||
|
}
|
||
|
//===============================================================================
|
||
|
|
||
|
// Get the patient's encounter ID for today, creating it if there is none.
|
||
|
//
|
||
|
function todaysEncounter($patient_id, $reason = '')
|
||
|
{
|
||
|
global $today, $userauthorized;
|
||
|
|
||
|
if (empty($reason)) {
|
||
|
$reason = xl('Please indicate visit reason');
|
||
|
}
|
||
|
|
||
|
// Was going to use the existing encounter for today if there is one, but
|
||
|
// decided it's right to always create a new one. Leaving the code here
|
||
|
// (and corresponding function above) in case it is ever wanted later.
|
||
|
/*******************************************************************
|
||
|
$encounter = todaysEncounterIf($patient_id);
|
||
|
if ($encounter) return $encounter;
|
||
|
*******************************************************************/
|
||
|
|
||
|
$tmprow = sqlQuery("SELECT username, facility, facility_id FROM users " .
|
||
|
"WHERE id = ?", array($_SESSION["authUserID"]));
|
||
|
$username = $tmprow['username'];
|
||
|
$facility = $tmprow['facility'];
|
||
|
$facility_id = $tmprow['facility_id'];
|
||
|
$conn = $GLOBALS['adodb']['db'];
|
||
|
$encounter = $conn->GenID("sequences");
|
||
|
$provider_id = $userauthorized ? $_SESSION['authUserID'] : 0;
|
||
|
addForm(
|
||
|
$encounter,
|
||
|
"New Patient Encounter",
|
||
|
sqlInsert(
|
||
|
"INSERT INTO form_encounter SET date = ?, onset_date = ?, " .
|
||
|
"reason = ?, facility = ?, facility_id = ?, pid = ?, encounter = ?, " .
|
||
|
"provider_id = ?",
|
||
|
array($today, $today, $reason, $facility, $facility_id, $patient_id,
|
||
|
$encounter, $provider_id)
|
||
|
),
|
||
|
"newpatient",
|
||
|
$patient_id,
|
||
|
$userauthorized,
|
||
|
"NOW()",
|
||
|
$username
|
||
|
);
|
||
|
return $encounter;
|
||
|
}
|
||
|
//===============================================================================
|
||
|
// get the original event's repeat specs
|
||
|
function update_event($eid)
|
||
|
{
|
||
|
$origEventRes = sqlStatement("SELECT * FROM openemr_postcalendar_events WHERE pc_eid = ?", array($eid));
|
||
|
$origEvent = sqlFetchArray($origEventRes);
|
||
|
$oldRecurrspec = unserialize($origEvent['pc_recurrspec'], ['allowed_classes' => false]);
|
||
|
$duration = $origEvent['pc_duration'];
|
||
|
$starttime = $origEvent['pc_startTime'];
|
||
|
$endtime = $origEvent['pc_endTime'];
|
||
|
$selected_date = date("Ymd");
|
||
|
if ($oldRecurrspec['exdate'] != "") {
|
||
|
$oldRecurrspec['exdate'] .= "," . $selected_date;
|
||
|
} else {
|
||
|
$oldRecurrspec['exdate'] .= $selected_date;
|
||
|
}
|
||
|
|
||
|
// mod original event recur specs to exclude this date
|
||
|
sqlStatement("UPDATE openemr_postcalendar_events SET pc_recurrspec = ? WHERE pc_eid = ?", array(serialize($oldRecurrspec),$eid));
|
||
|
// specify some special variables needed for the INSERT
|
||
|
// no recurr specs, this is used for adding a new non-recurring event
|
||
|
$noRecurrspec = array("event_repeat_freq" => "",
|
||
|
"event_repeat_freq_type" => "",
|
||
|
"event_repeat_on_num" => "1",
|
||
|
"event_repeat_on_day" => "0",
|
||
|
"event_repeat_on_freq" => "0",
|
||
|
"exdate" => ""
|
||
|
);
|
||
|
// Useless garbage that we must save.
|
||
|
$locationspecs = array("event_location" => "",
|
||
|
"event_street1" => "",
|
||
|
"event_street2" => "",
|
||
|
"event_city" => "",
|
||
|
"event_state" => "",
|
||
|
"event_postal" => ""
|
||
|
);
|
||
|
$locationspec = serialize($locationspecs);
|
||
|
$args['event_date'] = date('Y-m-d');
|
||
|
$args['duration'] = $duration;
|
||
|
// this event is forced to NOT REPEAT
|
||
|
$args['form_repeat'] = "0";
|
||
|
$args['recurrspec'] = $noRecurrspec;
|
||
|
$args['form_enddate'] = "0000-00-00";
|
||
|
$args['starttime'] = $starttime;
|
||
|
$args['endtime'] = $endtime;
|
||
|
$args['locationspec'] = $locationspec;
|
||
|
$args['form_category'] = $origEvent['pc_catid'];
|
||
|
$args['new_multiple_value'] = $origEvent['pc_multiple'];
|
||
|
$args['form_provider'] = $origEvent['pc_aid'];
|
||
|
$args['form_pid'] = $origEvent['pc_pid'];
|
||
|
$args['form_title'] = $origEvent['pc_title'];
|
||
|
$args['form_allday'] = $origEvent['pc_alldayevent'];
|
||
|
$args['form_apptstatus'] = '@';
|
||
|
$args['form_prefcat'] = $origEvent['pc_prefcatid'];
|
||
|
$args['facility'] = $origEvent['pc_facility'];
|
||
|
$args['billing_facility'] = $origEvent['pc_billing_location'];
|
||
|
InsertEvent($args, 'payment');
|
||
|
}
|
||
|
//===============================================================================
|
||
|
// check if event exists
|
||
|
function check_event_exist($eid)
|
||
|
{
|
||
|
$origEventRes = sqlStatement("SELECT * FROM openemr_postcalendar_events WHERE pc_eid = ?", array($eid));
|
||
|
$origEvent = sqlFetchArray($origEventRes);
|
||
|
$pc_catid = $origEvent['pc_catid'];
|
||
|
$pc_aid = $origEvent['pc_aid'];
|
||
|
$pc_pid = $origEvent['pc_pid'];
|
||
|
$pc_eventDate = date('Y-m-d');
|
||
|
$pc_startTime = $origEvent['pc_startTime'];
|
||
|
$pc_endTime = $origEvent['pc_endTime'];
|
||
|
$pc_facility = $origEvent['pc_facility'];
|
||
|
$pc_billing_location = $origEvent['pc_billing_location'];
|
||
|
$pc_recurrspec_array = unserialize($origEvent['pc_recurrspec'], ['allowed_classes' => false]);
|
||
|
$origEvent = sqlStatement(
|
||
|
"SELECT * FROM openemr_postcalendar_events WHERE pc_eid != ? and pc_catid=? and pc_aid=? " .
|
||
|
"and pc_pid=? and pc_eventDate=? and pc_startTime=? and pc_endTime=? and pc_facility=? and pc_billing_location=?",
|
||
|
array($eid,$pc_catid,$pc_aid,$pc_pid,$pc_eventDate,$pc_startTime,$pc_endTime,$pc_facility,$pc_billing_location)
|
||
|
);
|
||
|
if (sqlNumRows($origEvent) > 0) {
|
||
|
$origEventRow = sqlFetchArray($origEvent);
|
||
|
return $origEventRow['pc_eid'];
|
||
|
} else {
|
||
|
if (strpos($pc_recurrspec_array['exdate'], date('Ymd')) === false) {//;'20110228'
|
||
|
return false;
|
||
|
} else {//this happens in delete case
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//===============================================================================
|
||
|
// insert an event
|
||
|
// $args is mainly filled with content from the POST http var
|
||
|
function InsertEvent($args, $from = 'general')
|
||
|
{
|
||
|
$pc_recurrtype = '0';
|
||
|
if (!empty($args['form_repeat']) || !empty($args['days_every_week'])) {
|
||
|
if ($args['recurrspec']['event_repeat_freq_type'] == "6") {
|
||
|
$pc_recurrtype = 3;
|
||
|
} else {
|
||
|
$pc_recurrtype = $args['recurrspec']['event_repeat_on_freq'] ? '2' : '1';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$form_pid = empty($args['form_pid']) ? '' : $args['form_pid'];
|
||
|
$form_room = empty($args['form_room']) ? '' : $args['form_room'];
|
||
|
$form_gid = empty($args['form_gid']) ? '' : $args['form_gid'];
|
||
|
;
|
||
|
if ($from == 'general') {
|
||
|
$pc_eid = sqlInsert(
|
||
|
"INSERT INTO openemr_postcalendar_events ( " .
|
||
|
"pc_catid, pc_multiple, pc_aid, pc_pid, pc_gid, pc_title, pc_time, pc_hometext, " .
|
||
|
"pc_informant, pc_eventDate, pc_endDate, pc_duration, pc_recurrtype, " .
|
||
|
"pc_recurrspec, pc_startTime, pc_endTime, pc_alldayevent, " .
|
||
|
"pc_apptstatus, pc_prefcatid, pc_location, pc_eventstatus, pc_sharing, pc_facility,pc_billing_location,pc_room " .
|
||
|
") VALUES (?,?,?,?,?,?,NOW(),?,?,?,?,?,?,?,?,?,?,?,?,?,1,1,?,?,?)",
|
||
|
array($args['form_category'],(isset($args['new_multiple_value']) ? $args['new_multiple_value'] : ''),$args['form_provider'],$form_pid,$form_gid,
|
||
|
$args['form_title'],$args['form_comments'],$_SESSION['authUserID'],$args['event_date'],
|
||
|
fixDate($args['form_enddate']),$args['duration'],$pc_recurrtype,serialize($args['recurrspec']),
|
||
|
$args['starttime'],$args['endtime'],$args['form_allday'],$args['form_apptstatus'],$args['form_prefcat'],
|
||
|
$args['locationspec'],(int)$args['facility'],(int)$args['billing_facility'],$form_room)
|
||
|
);
|
||
|
|
||
|
//Manage tracker status.
|
||
|
if (!empty($form_pid)) {
|
||
|
manage_tracker_status($args['event_date'], $args['starttime'], $pc_eid, $form_pid, $_SESSION['authUser'], $args['form_apptstatus'], $args['form_room']);
|
||
|
}
|
||
|
|
||
|
$GLOBALS['temporary-eid-for-manage-tracker'] = $pc_eid; //used by manage tracker module to set correct encounter in tracker when check in
|
||
|
|
||
|
return $pc_eid;
|
||
|
} elseif ($from == 'payment') {
|
||
|
sqlStatement(
|
||
|
"INSERT INTO openemr_postcalendar_events ( " .
|
||
|
"pc_catid, pc_multiple, pc_aid, pc_pid, pc_title, pc_time, " .
|
||
|
"pc_eventDate, pc_endDate, pc_duration, pc_recurrtype, " .
|
||
|
"pc_recurrspec, pc_startTime, pc_endTime, pc_alldayevent, " .
|
||
|
"pc_apptstatus, pc_prefcatid, pc_location, pc_eventstatus, pc_sharing, pc_facility,pc_billing_location " .
|
||
|
") VALUES (?,?,?,?,?,NOW(),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
|
||
|
array($args['form_category'],$args['new_multiple_value'],$args['form_provider'],$form_pid,$args['form_title'],
|
||
|
$args['event_date'],$args['form_enddate'],$args['duration'],$pc_recurrtype,serialize($args['recurrspec']),
|
||
|
$args['starttime'],$args['endtime'],$args['form_allday'],$args['form_apptstatus'],$args['form_prefcat'], $args['locationspec'],
|
||
|
1,
|
||
|
1,
|
||
|
(int)$args['facility'],
|
||
|
(int)$args['billing_facility'])
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
//================================================================================================================
|
||
|
/**
|
||
|
* __increment()
|
||
|
* returns the next valid date for an event based on the
|
||
|
* current day,month,year,freq and type
|
||
|
* @private
|
||
|
* @returns string YYYY-MM-DD
|
||
|
*/
|
||
|
function &__increment($d, $m, $y, $f, $t)
|
||
|
{
|
||
|
if ($t == REPEAT_DAYS_EVERY_WEEK) {
|
||
|
$old_appointment_date = date('Y-m-d', mktime(0, 0, 0, $m, $d, $y));
|
||
|
$next_appointment_date = getTheNextAppointment($old_appointment_date, $f);
|
||
|
return $next_appointment_date;
|
||
|
}
|
||
|
|
||
|
if ($t == REPEAT_EVERY_DAY) {
|
||
|
$d = $d + $f;
|
||
|
} elseif ($t == REPEAT_EVERY_WORK_DAY) {
|
||
|
// a workday is defined as Mon,Tue,Wed,Thu,Fri
|
||
|
// repeating on every or Nth work day means to not include
|
||
|
// weekends (Sat/Sun) in the increment... tricky
|
||
|
|
||
|
// ugh, a day-by-day loop seems necessary here, something where
|
||
|
// we can check to see if the day is a Sat/Sun and increment
|
||
|
// the frequency count so as to ignore the weekend. hmmmm....
|
||
|
$orig_freq = $f;
|
||
|
for ($daycount = 1; $daycount <= $orig_freq; $daycount++) {
|
||
|
$nextWorkDOW = date('w', mktime(0, 0, 0, $m, ($d + $daycount), $y));
|
||
|
if (is_weekend_day($nextWorkDOW)) {
|
||
|
$f++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// and finally make sure we haven't landed on a end week days
|
||
|
// adjust as necessary
|
||
|
$nextWorkDOW = date('w', mktime(0, 0, 0, $m, ($d + $f), $y));
|
||
|
if (count($GLOBALS['weekend_days']) === 2) {
|
||
|
if ($nextWorkDOW == $GLOBALS['weekend_days'][0]) {
|
||
|
$f += 2;
|
||
|
} elseif ($nextWorkDOW == $GLOBALS['weekend_days'][1]) {
|
||
|
$f++;
|
||
|
}
|
||
|
} elseif (count($GLOBALS['weekend_days']) === 1 && $nextWorkDOW === $GLOBALS['weekend_days'][0]) {
|
||
|
$f++;
|
||
|
}
|
||
|
|
||
|
$d = $d + $f;
|
||
|
} elseif ($t == REPEAT_EVERY_WEEK) {
|
||
|
$d = $d + (7 * $f);
|
||
|
} elseif ($t == REPEAT_EVERY_MONTH) {
|
||
|
$m = $m + $f;
|
||
|
} elseif ($t == REPEAT_EVERY_YEAR) {
|
||
|
$y = $y + $f;
|
||
|
}
|
||
|
|
||
|
$dtYMD = date('Y-m-d', mktime(0, 0, 0, $m, $d, $y));
|
||
|
return $dtYMD;
|
||
|
}
|
||
|
|
||
|
function getTheNextAppointment($appointment_date, $freq)
|
||
|
{
|
||
|
$day_arr = explode(",", $freq);
|
||
|
$date_arr = array();
|
||
|
foreach ($day_arr as $day) {
|
||
|
$day = getDayName($day);
|
||
|
$date = date('Y-m-d', strtotime("next " . $day, strtotime($appointment_date)));
|
||
|
array_push($date_arr, $date);
|
||
|
}
|
||
|
|
||
|
$next_appointment = getEarliestDate($date_arr);
|
||
|
return $next_appointment;
|
||
|
}
|
||
|
|
||
|
function getDayName($day_num)
|
||
|
{
|
||
|
if ($day_num == "1") {
|
||
|
return "sunday";
|
||
|
}
|
||
|
|
||
|
if ($day_num == "2") {
|
||
|
return "monday";
|
||
|
}
|
||
|
|
||
|
if ($day_num == "3") {
|
||
|
return "tuesday";
|
||
|
}
|
||
|
|
||
|
if ($day_num == "4") {
|
||
|
return "wednesday";
|
||
|
}
|
||
|
|
||
|
if ($day_num == "5") {
|
||
|
return "thursday";
|
||
|
}
|
||
|
|
||
|
if ($day_num == "6") {
|
||
|
return "friday";
|
||
|
}
|
||
|
|
||
|
if ($day_num == "7") {
|
||
|
return "saturday";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function getEarliestDate($date_arr)
|
||
|
{
|
||
|
$earliest = ($date_arr[0]);
|
||
|
foreach ($date_arr as $date) {
|
||
|
if (strtotime($date) < strtotime($earliest)) {
|
||
|
$earliest = $date;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $earliest;
|
||
|
}
|
||
|
//================================================================================================================
|