133 lines
4.8 KiB
C#
133 lines
4.8 KiB
C#
using LSFE.MobApp.Entities.Doctor;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
|
|
namespace LSFE.MobApp.ViewModels.Coverage
|
|
{
|
|
public class ViewDoctorVM : INotifyPropertyChanged
|
|
{
|
|
private readonly Doctor _doctor;
|
|
|
|
public ViewDoctorVM(Doctor doctor)
|
|
{
|
|
_doctor = doctor;
|
|
|
|
CloseCommand = new Command(async () => await Close());
|
|
CopyEmailCommand = new Command(async () => await CopyEmail());
|
|
CallPhoneCommand = new Command(async () => await CallPhone());
|
|
}
|
|
|
|
public string FullName => $"Dr. {_doctor.FirstName} {_doctor.MiddleInitial} {_doctor.LastName}".Replace(" ", " ").Trim();
|
|
public string EmailAddress => _doctor.EmailAddress ?? "N/A";
|
|
public string PhoneNo => _doctor.PhoneNo ?? "N/A";
|
|
public string LicenseNo => _doctor.LicenseNo ?? "N/A";
|
|
public string Specialization => _doctor.SpecializationName ?? "General Practice";
|
|
public string InstitutionName => _doctor.InstitutionName ?? "No Institution Assigned";
|
|
public string Address => _doctor.Address ?? "No address provided";
|
|
public string MaxVisit => $"{_doctor.MaxVisit} doctors";
|
|
public string BirthDateFormatted => _doctor.BirthDate.ToString("MMMM dd, yyyy");
|
|
public string CreatedDateFormatted => _doctor.CreatedDate.ToString("MMMM dd, yyyy");
|
|
|
|
public bool HasInstitution => !string.IsNullOrEmpty(_doctor.InstitutionName);
|
|
public bool HasAddress => !string.IsNullOrEmpty(_doctor.Address);
|
|
|
|
public string StatusText
|
|
{
|
|
get
|
|
{
|
|
return _doctor.Status switch
|
|
{
|
|
0 => "Pending",
|
|
1 => "Approved",
|
|
2 => "For DSM Approval",
|
|
3 => "Inactive",
|
|
_ => "Unknown"
|
|
};
|
|
}
|
|
}
|
|
|
|
public Color StatusBackgroundColor
|
|
{
|
|
get
|
|
{
|
|
return _doctor.Status switch
|
|
{
|
|
1 => Color.FromArgb("#D1FAE5"), // Approved - Green
|
|
2 => Color.FromArgb("#FEF3C7"), // For DSM Approval - Yellow
|
|
0 => Color.FromArgb("#E0E7FF"), // Pending - Blue
|
|
3 => Color.FromArgb("#FEE2E2"), // Inactive - Red
|
|
_ => Color.FromArgb("#F3F4F6")
|
|
};
|
|
}
|
|
}
|
|
|
|
public Color StatusTextColor
|
|
{
|
|
get
|
|
{
|
|
return _doctor.Status switch
|
|
{
|
|
1 => Color.FromArgb("#065F46"), // Approved - Dark Green
|
|
2 => Color.FromArgb("#92400E"), // For DSM Approval - Dark Yellow
|
|
0 => Color.FromArgb("#3730A3"), // Pending - Dark Blue
|
|
3 => Color.FromArgb("#991B1B"), // Inactive - Dark Red
|
|
_ => Color.FromArgb("#4B5563")
|
|
};
|
|
}
|
|
}
|
|
|
|
public ICommand CloseCommand { get; }
|
|
public ICommand CopyEmailCommand { get; }
|
|
public ICommand CallPhoneCommand { get; }
|
|
|
|
private async Task Close()
|
|
{
|
|
await Application.Current.MainPage.Navigation.PopAsync();
|
|
}
|
|
|
|
private async Task CopyEmail()
|
|
{
|
|
if (!string.IsNullOrEmpty(_doctor.EmailAddress))
|
|
{
|
|
await Clipboard.SetTextAsync(_doctor.EmailAddress);
|
|
await Application.Current.MainPage.DisplayAlert("Copied", "Email address copied to clipboard", "OK");
|
|
}
|
|
}
|
|
|
|
private async Task CallPhone()
|
|
{
|
|
if (!string.IsNullOrEmpty(_doctor.PhoneNo))
|
|
{
|
|
try
|
|
{
|
|
if (PhoneDialer.Default.IsSupported)
|
|
{
|
|
PhoneDialer.Default.Open(_doctor.PhoneNo);
|
|
}
|
|
else
|
|
{
|
|
await Clipboard.SetTextAsync(_doctor.PhoneNo);
|
|
await Application.Current.MainPage.DisplayAlert("Phone Number", "Phone number copied to clipboard", "OK");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await Application.Current.MainPage.DisplayAlert("Error", $"Unable to dial: {ex.Message}", "OK");
|
|
}
|
|
}
|
|
}
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
|
{
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
}
|
|
}
|