@page "{id:int}" @model JobsMedical.Web.Pages.Jobs.DetailsModel @{ var j = Model.Job!; var f = j.Facility!; var hasFac = JobsMedical.Web.Services.SeoJsonLd.HasRealEmployer(f); // false for the «نامشخص» placeholder var jobContacts = (j.Contacts ?? new List()).ToList(); // Map: listing's own approx coords (aggregated) then facility's; aggregated = approximate area. var mapLat = j.Lat ?? f.Lat; var mapLng = j.Lng ?? f.Lng; var mapApprox = j.Source == JobsMedical.Web.Models.ShiftSource.Aggregated; ViewData["Title"] = j.Title; ViewData["Description"] = hasFac ? $"{j.Title} در {f.Name}، {f.City?.Name}. موقعیت استخدامی برای {j.Role?.Name}." : $"{j.Title} در {f.City?.Name}. موقعیت استخدامی برای {j.Role?.Name}."; // Don't let Google index filled/expired openings (avoids dead "Job for jobs" results). if (j.Status != JobsMedical.Web.Models.ShiftStatus.Open) ViewData["NoIndex"] = true; string empLabel = j.EmploymentType switch { EmploymentType.FullTime => "تمام‌وقت", EmploymentType.PartTime => "پاره‌وقت", EmploymentType.Contract => "قراردادی", _ => "طرح", }; string salary; if (j.SalaryMin is null && j.SalaryMax is null) salary = "توافقی"; else if (j.SalaryMin == j.SalaryMax) salary = JalaliDate.Toman(j.SalaryMin) + " ماهانه"; else salary = $"از {JalaliDate.ToPersianDigits((j.SalaryMin ?? 0).ToString("#,0"))} تا {JalaliDate.Toman(j.SalaryMax)} ماهانه"; var crumbs = new List { new("خانه", "/"), new("استخدام", "/Jobs") }; if (j.Role is not null) crumbs.Add(new(j.Role.Name, "/استخدام/" + JobsMedical.Web.Services.SeoSlug.Of(j.Role.Name))); crumbs.Add(new(j.Title, null)); }
@empLabel @if (j.Role is not null) { @j.Role.Name } @if (f.IsVerified) { ✓ مرکز تأیید شده }

@j.Title

@(hasFac ? "🏥 " + f.Name + " — " : "")📍 @f.City?.Name@(f.District is not null ? "، " + f.District.Name : "")

@if (Model.ShowContact) {

✓ راه‌های ارتباطی

@if (jobContacts.Count > 0) { @* Numbers from THIS ad (aggregated) — the correct, per-listing contacts. *@ } else if (JobsMedical.Web.Services.SeoJsonLd.HasRealEmployer(f) && (!string.IsNullOrEmpty(f.Phone) || !string.IsNullOrEmpty(f.BaleId))) { @if (!string.IsNullOrEmpty(f.Phone)) {
📞 تلفن مرکز@f.Phone تماس
} @if (!string.IsNullOrEmpty(f.BaleId)) {
💬 بله@f.BaleId باز کردن
} } else {

شماره‌ای ثبت نشده است.

}
} @if (Model.Saved) {
✓ این موقعیت ذخیره شد.
}

مشخصات موقعیت

نوع همکاری@empLabel
نقش@j.Role?.Name
@if (j.GenderRequirement != Gender.Any) {
جنسیت@JalaliDate.GenderLabel(j.GenderRequirement)
}
حقوق ماهانه@salary
@if (!string.IsNullOrEmpty(j.Description)) {

شرح موقعیت

@j.Description

} @if (!string.IsNullOrEmpty(j.Requirements)) {

شرایط احراز

@j.Requirements

}
@* Sticky bottom action bar — mobile only. *@
@if (!string.IsNullOrEmpty(Model.MapKey) && mapLat is not null) { } @section Head { @* Only emit JobPosting structured data for a real named employer — Google for Jobs rejects a placeholder/empty hiringOrganization (most aggregated ads have no named center). *@ @{ var bu = $"{ViewContext.HttpContext.Request.Scheme}://{ViewContext.HttpContext.Request.Host}"; } @Html.Raw("") @if (JobsMedical.Web.Services.SeoJsonLd.HasRealEmployer(f)) { @Html.Raw("") } }