File: /var/www/vhost/disk-apps/demo-telemedicina.teky.com.co/app/Http/Controllers/RFastController.php
<?php
namespace Telemedicina\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redirect;
use Carbon\Carbon;
use DB;
use Validator;
use Session;
use DateTime;
use Telemedicina\User;
use Telemedicina\Event;
use Illuminate\Support\Facades\Auth;
use Calendar;
use LaravelFullCalendar\Facades\Calendar as FacadesCalendar;
use Telemedicina\TemplateResponse;
use Telemedicina\Specialty;
use Telemedicina\HeaderValue;
use Telemedicina\RequestType;
class RFastController extends Controller
{
public function index(){
return view('rfast.rfast');
}
public function updateScheduleRfast(Request $request){
if(!$this->rfastConnectionTest()){
return response(array("r" => false, "data" => 'No hay conexión con R-Fast'));
}
$objs = DB::connection('sqlsrv-rfast')->table('fac_m_citas')
->where('FECHA','>',Carbon::now()->format('Ymd H:i:s').'.000')
// ->where('FECHA','>','2021-07-29 07:00:00.000')
->where('CUPO_WEB',1)
->orderBy('FECHA')
->get();
if(count($objs) == 0){
$events_date = Event::where('event_date','>=',Carbon::now()->format('Y-m-d'))->get();
foreach ($events_date as $key => $value) {
$date_event = $value->event_date.' '.$value->start_time;
if($date_event > Carbon::now()->format('Y-m-d H:i:s')){
$value->delete();
}
}
return response(array("r" => false, "data" => 'No hay agenda para generar desde R-Fast'));
}else{
$events_date = Event::where('event_date','>=',Carbon::now()->format('Y-m-d'))->get();
foreach ($events_date as $key => $value) {
$date_event = $value->event_date.' '.$value->start_time;
if($date_event > Carbon::now()->format('Y-m-d H:i:s')){
$value->delete();
}
}
foreach($objs as $key => $obj){
if($obj->CODIGO){
$medic = User::where('medic_code',$obj->CODIGO)->first();
if($medic){
// Si el médico existe
$date = Carbon::parse($obj->FECHA);
$event = new Event;
$event->event_date = $date->toDateString();
$event->start_time = $date->toTimeString();
$event->end_time = $date->addMinutes(15)->toTimeString();
if($obj->FECHA_SOLICITADA){
// Cuando hay citas agendada en R-Fasr
$speciality = Specialty::where('code_cp',$obj->CENTROPROD)->first();
if(explode(':',$obj->OBSERVACIONES)[0] == 'TDOC'){
$tdoc = explode(':',$obj->OBSERVACIONES)[1];
$regs = explode(',',$tdoc);
if($obj->NUMERO_FACTURA && $obj->DOCUMENTO_FACTURA){
$event->event_state = 4;
}else{
$event->event_state = $regs[0];
}
// Registro Teledoc
$event->rate = 0;
$event->send_consent = 0;
$event->send_payment = 0;
$event->user_id = $regs[1];
$event->medic_id = $regs[2];
$event->agenda_type_id = $regs[3];
$event->specialty_id = $speciality->id;
if(str_contains($regs[4], 'null')){
$event->header_value_id = NULL;
}else{
$event->header_value_id = $regs[4];
}
if(str_contains($regs[5], 'null')){
$event->document_id = NULL;
}else{
$event->document_id = $regs[5];
}
$event->save();
}else{
if($obj->NUMERO_FACTURA && $obj->DOCUMENTO_FACTURA){
$event->event_state = 4;
}else{
$event->event_state= 3;
}
// Registro de R-Fast
$us = User::where('document',$obj->HISTORIA)->first();
//$event->event_state= 3;
$event->rate = 0;
$event->send_consent = 0;
$event->send_payment = 0;
$event->user_id = $us->id;
$event->medic_id = $medic->id;
$event->specialty_id = $speciality->id;
$event->save();
}
}else{
$date_mr = Carbon::parse($obj->FECHA)->format('Y-m-d H:i:s');
// Valida si hay solicitud móvil
$hv = HeaderValue::where('is_from_app',1)
->where('clinic_document_id',null)
->where('state',1)
->where('suggested_medic_id',$medic->id)
->where('date',$date_mr)
->with('form')->first();
if($hv){
// Cuando hay solicitud móvil
$event->event_state= 2;
$event->rate = 0;
$event->send_consent = 0;
$event->send_payment = 0;
$event->user_id = $hv->user_id;
$event->medic_id = $medic->id;
$event->agenda_type_id = $hv->date_type_id;
$event->specialty_id = $hv->form->specialty_id;
$event->header_value_id = $hv->id;
$event->save();
}else{
// Cuando la agenda esta vacía
$event->event_state= 1;
$event->rate = 0;
$event->send_consent = 0;
$event->send_payment = 0;
$event->medic_id = $medic->id;
$event->save();
}
}
}
}
}
return response(array("r" => true, "data" => $obj));
}
}
public function appointmentMovilRequest($header_id){
if(!$this->rfastConnectionTest()){
return response(array("r" => false, "data" => 'No hay conexión con R-Fast'));
}
$hv = HeaderValue::where('id',$header_id)->first();
$event_confirmed = Event::where('header_value_id',$header_id)->with('user','event_state_option','medic','agenda_type','speciality')->first();
$rfast_tarjetero = DB::connection('sqlsrv-rfast')->table('fac_m_tarjetero')
->where('HISTORIA',$event_confirmed->user->document)->get();
if(count($rfast_tarjetero) == 0){
return response(array("r" => false, "data" => 'Usuario no registrado en R-Fast'));
}
$hv->state = 2;
$hv->update();
$event_confirmed->event_state = 3;
//$event_confirmed->send_payment = 1;
$event_confirmed->update();
$medic_id = $event_confirmed->medic_id;
//$medic_data = User::where('id', $medic_id)->first();
$medic = User::where('id',$medic_id)->with('specialty')->first();
$rfast_date_confirmed = DB::connection('sqlsrv-rfast')->table('fac_m_citas')
->where('FECHA',str_replace('-','',$event_confirmed->event_date).' '.$event_confirmed->start_time.'.000')
->where('CODIGO',$medic->medic_code)
->where('CUPO_WEB',1)
->update(['FECHA_SOLICITUD' => Carbon::now()->format('Ymd H:i:s'),
'FECHA_SOLICITADA' => str_replace('-','',$event_confirmed->event_date).' '.$event_confirmed->start_time,
'TIPO_SOLICITUD' => 3,
'IPS' => 196980002601,
'CENTROPROD' => $event_confirmed->speciality->code_cp,
'HISTORIA' => $event_confirmed->user->document,
'TELEFONO' => $event_confirmed->user->phone,
'TIPDOCUM' => $event_confirmed->user->identification_type_id,
'NUMDOCUM' => $event_confirmed->user->document,
'APELLIDO1' => $event_confirmed->user->last_name,
'APELLIDO2' => '',
'NOMBRE1' => $event_confirmed->user->name,
'NOMBRE2' => '',
'OBSERVACIONES' => 'TDOC:'.$event_confirmed->event_state.','.$event_confirmed->user_id.','.
$event_confirmed->medic_id.','.$event_confirmed->agenda_type_id.','.
$event_confirmed->header_value_id.',null',
'CODIGO_USUARIO' => 'jhamf']);
return response(array("r" => true, "data" => 'Solicitud móvil agendada'));
}
public function filterCalendar(Request $request, $header_id = null){
$medic = null;
$is_medic = false;
if ($header_id) {
// if(!$this->rfastConnectionTest()){
// Session::flash('data', array('type' => 'warning', 'message' => 'No hay conexión con R-Fast'));
// return redirect()->back();
// }
$hv = HeaderValue::where('id',$header_id)->first();
$event_confirmed = Event::where('header_value_id',$header_id)->with('user','event_state_option','medic','agenda_type','speciality')->first();
//dd($event_confirmed->user->identification_type_id);
//dd($event_confirmed->speciality->code_cp);
// $rfast_tarjetero = DB::connection('sqlsrv-rfast')->table('fac_m_tarjetero')
// ->where('HISTORIA',$event_confirmed->user->document)->get();
// if(count($rfast_tarjetero) == 0){
// return response(array("r" => false, "data" => 'Usuario no registrado en R-Fast'));
// }
// if(count($rfast_tarjetero) == 0){
// Session::flash('data', array('type' => 'warning', 'message' => 'El usuario no se encuentra en los registros de Quilisalud'));
// return redirect()->back();
// }
$medic_id = $event_confirmed->medic_id;
if(Auth::user()->rol->id == 3 || Auth::user()->rol->id == 6){
$events = Event::where('medic_id', Auth::user()->id)->where('active', true)->with('user','event_state_option')->get();
$is_medic = true;
}else{
$events = Event::where('active', true)->where('medic_id',$medic_id)->with('user','event_state_option')->get();
}
}elseif($request->medic_id){
if(Auth::user()->rol->id == 3 || Auth::user()->rol->id == 6){
$events = Event::where('medic_id', Auth::user()->id)->where('active', true)->with('user','event_state_option')->get();
$is_medic = true;
}else{
$events = Event::where('active', true)->where('medic_id',$request->medic_id)->with('user','event_state_option')->get();
}
$medic = User::where('id',$request->medic_id)->with('specialty')->first();
}else{
$events = [];
//$medic = User::where('id',$request->medic_id)->with('specialty')->first();
}
$responses_cancel = TemplateResponse::where('active', true)->get();
$specialties = Specialty::where('active', true)->get();
$medicos = User::orWhere('rol_id',3)->OrWhere('rol_id', 6)->where('active', true)->get();
$request_types = RequestType::where('active', true)->get();
$events_list_available = [];
$events_list_movil = [];
$events_list_confirmed = [];
$events_list_invoiced = [];
$events_list_not_available = [];
$events_list_finished = [];
foreach ($events as $key => $event) {
if($event->user){
$title = $event->user->name . " " . $event->user->last_name;
}else{
$title = $event->event_state_option->name;
}
if($event->event_state == 1){
$events_list_available[] = Calendar::event(
$title,
false,
new DateTime($event->event_date . " " . $event->start_time),
new DateTime($event->event_date . " " . $event->end_time ),
$event->id
);
}elseif($event->event_state == 2){
$events_list_movil[] = Calendar::event(
$title,
false,
new DateTime($event->event_date . " " . $event->start_time),
new DateTime($event->event_date . " " . $event->end_time ),
$event->id
);
}elseif($event->event_state == 3){
$events_list_confirmed[] = Calendar::event(
$title,
false,
new DateTime($event->event_date . " " . $event->start_time),
new DateTime($event->event_date . " " . $event->end_time ),
$event->id
);
}elseif($event->event_state == 4){
$events_list_invoiced[] = Calendar::event(
$title,
false,
new DateTime($event->event_date . " " . $event->start_time),
new DateTime($event->event_date . " " . $event->end_time ),
$event->id
);
}elseif($event->event_state == 5){
$events_list_finished[] = Calendar::event(
$title,
false,
new DateTime($event->event_date . " " . $event->start_time),
new DateTime($event->event_date . " " . $event->end_time ),
$event->id
);
}elseif($event->event_state == 6){
$events_list_not_available[] = Calendar::event(
$title,
false,
new DateTime($event->event_date . " " . $event->start_time),
new DateTime($event->event_date . " " . $event->end_time ),
$event->id
);
}
}
$calendar_details = Calendar::addEvents($events_list_invoiced)
->addEvents($events_list_available, [ 'color' => '#00b34a'])
->addEvents($events_list_movil, [ 'color' => '#ff8000'])
->addEvents($events_list_confirmed, [ 'color' => '#750062'])
->addEvents($events_list_finished, [ 'color' => '#007373'])
->addEvents($events_list_not_available, [ 'color' => '#951703'])
->setOptions([
'slotDuration'=> '00:15:00',
'slotLabelInterval'=> 15,
'slotMinutes'=> 15,
'snapDuration'=> '00:30:00',
'firstDay' => 1,
'defaultView' => 'agendaWeek'
])
->setCallbacks([
'eventClick' => 'function(event) {
window.currentDateId = event.id;
showDateDecisionModal(event.id);
}',
]);
if($header_id){
return view('agenda.main', compact(['calendar_details', 'responses_cancel', 'medicos', 'medic','is_medic', 'specialties', 'request_types','header_id']));
} else {
return view('agenda.main', compact(['calendar_details', 'responses_cancel', 'medicos', 'medic','is_medic', 'specialties', 'request_types']));
}
}
public function scheduleFromPortal(Request $request){
if(!$this->rfastConnectionTest()){
return response(array("r" => false, "data" => 'No hay conexión con R-Fast'));
}
$user = User::where('id', $request->user_id)->first();
if(!$user){
return response(array("r" => false, "data" => 'El usuario no existe en la base de datos'));
}
$rfast_tarjetero = DB::connection('sqlsrv-rfast')->table('fac_m_tarjetero')
->where('HISTORIA',$user->document)->get();
if(count($rfast_tarjetero) == 0){
return response(array("r" => false, "data" => 'Usuario no registrado en R-Fast'));
}
$event_confirmed = Event::where('id',$request->event_id)->with('user','event_state_option','medic','agenda_type','speciality')->first();
// $hv = new HeaderValue;
// $hv->user_id = $user->id;
// $hv->user_id = $request->speciality_id;
// $hv->state = 1;
// $hv->suggested_medic_id = $event_confirmed->medic_id;
// $hv->date_type_id = $request->date_type_id;
// $hv->date = $event_confirmed->event_date.' '.$event_confirmed->start_time;
// $hv->is_from_app = 0;
// $hv->save();
$event_confirmed->event_state = 3;
//$event_confirmed->send_payment = 1;
$event_confirmed->user_id = $request->user_id;
$event_confirmed->agenda_type_id = $request->date_type_id;
$event_confirmed->specialty_id = $request->speciality_id;
// $event_confirmed->header_value_id = $request->speciality_id;
$event_confirmed->update();
$medic_data = User::where('id', $event_confirmed->medic_id)->first();
$event_confirmed = Event::where('id',$request->event_id)->with('user','event_state_option','medic','agenda_type','speciality')->first();
if($request->request_type){
$centro_produccion = $request->request_type;
} else {
$centro_produccion = $event_confirmed->speciality->code_cp;
}
$rfast_date_confirmed = DB::connection('sqlsrv-rfast')->table('fac_m_citas')
->where('FECHA',str_replace('-','',$event_confirmed->event_date).' '.$event_confirmed->start_time.'.000')
->where('CODIGO',$medic_data->medic_code)
->where('CUPO_WEB',1)
->update(['FECHA_SOLICITUD' => Carbon::now()->format('Ymd H:i:s'),
'FECHA_SOLICITADA' => str_replace('-','',$event_confirmed->event_date).' '.$event_confirmed->start_time,
'TIPO_SOLICITUD' => 3,
'IPS' => 196980002601,
'CENTROPROD' => $centro_produccion,
'HISTORIA' => $user->document,
'TELEFONO' => $user->phone,
'TIPDOCUM' => $user->identification_type_id,
'NUMDOCUM' => $user->document,
'APELLIDO1' => $user->last_name,
'APELLIDO2' => '',
'NOMBRE1' => $user->name,
'NOMBRE2' => '',
'OBSERVACIONES' => 'TDOC:3,'.$event_confirmed->user_id.','.$event_confirmed->medic_id.','.
$event_confirmed->agenda_type_id.',null,null',
'CODIGO_USUARIO' => 'jhamf']);
return response(array("r" => true, "data" => $event_confirmed));
}
public function invoiceConfirmed(Request $request){
if(!$this->rfastConnectionTest()){
return response(array("r" => false, "data" => 'No hay conexión con R-Fast'));
}
$event = Event::where('id',$request->event_id)->first();
$medic_data = User::where('id', $event->medic_id)->first();
$rfast_invoice_confirmed = DB::connection('sqlsrv-rfast')->table('fac_m_citas')
->where('FECHA',str_replace('-','',$event->event_date).' '.$event->start_time.'.000')
->where('CODIGO',$medic_data->medic_code)
->where('CUPO_WEB',1)->get();
if($rfast_invoice_confirmed[0]->NUMERO_FACTURA && $rfast_invoice_confirmed[0]->DOCUMENTO_FACTURA){
$event->event_state = 4;
$event->update();
return response(array("r" => true, "data" => $rfast_invoice_confirmed[0]));
}else{
return response(array("r" => false, "data" => 'La consulta no se ha facturado aun'));
}
}
public function rfastConnectionTest(){
// Test database connection
try {
DB::connection('sqlsrv-rfast')->getPdo();
return true;
} catch (\Exception $e) {
return false;
}
}
public function cancelAppointment(Request $request){
if(!$this->rfastConnectionTest()){
return response(array("r" => false, "data" => 'No hay conexión con R-Fast'));
}
$event_confirmed = Event::where('id',$request->event_id)->with('user','event_state_option','medic','agenda_type','speciality')->first();
$medic_data = User::where('id', $event_confirmed->medic_id)->first();
$rfast_date_canceled = DB::connection('sqlsrv-rfast')->table('fac_m_citas')
->where('FECHA',str_replace('-','',$event_confirmed->event_date).' '.$event_confirmed->start_time.'.000')
->where('CODIGO',$medic_data->medic_code)
->where('CUPO_WEB',1)
->update(['FECHA_SOLICITUD' => NULL,
'FECHA_SOLICITADA' => NULL,
'TIPO_SOLICITUD' => NULL,
'IPS' => NULL,
'CENTROPROD' => NULL,
'HISTORIA' => '33333333',
'TELEFONO' => '',
'TIPDOCUM' => 0,
'NUMDOCUM' => '33333333',
'APELLIDO1' => 'NO AGENDAR',
'APELLIDO2' => '',
'NOMBRE1' => 'CUPOS TELEDOC',
'NOMBRE2' => '',
'OBSERVACIONES' => '',
'CODIGO_USUARIO' => NULL]);
if($event_confirmed->header_value_id){
$hv = HeaderValue::where('id', $event_confirmed->header_value_id)->first();
$hv->state = 6;
$hv->cancel_text = $request->title_cancel.': '.$request->text_cancel;
$hv->update();
}
$event_confirmed->event_state = 1;
//$event_confirmed->send_payment = 1;
$event_confirmed->user_id = NULL;
$event_confirmed->agenda_type_id = NULL;
$event_confirmed->specialty_id = NULL;
$event_confirmed->header_value_id = NULL;
$event_confirmed->update();
return response(array("r" => true, "data" => $event_confirmed));
}
}