diff --git a/app/Http/Controllers/Api/SponsorController.php b/app/Http/Controllers/Api/SponsorController.php index e0c80b3..7da8172 100644 --- a/app/Http/Controllers/Api/SponsorController.php +++ b/app/Http/Controllers/Api/SponsorController.php @@ -110,15 +110,27 @@ public function getCharityEvents(Request $request) $organization = optional($event->employer)->employerProfile->company_name ?? 'Migrant Support'; } + // Decode charity details if they exist in json + $charityDetails = null; + $content = $event->body; + if (strpos($event->body, '{"type":"Charity"') === 0) { + $decoded = json_decode($event->body, true); + if ($decoded) { + $charityDetails = $decoded; + $content = $decoded['content'] ?? $event->body; + } + } + return [ - 'id' => $event->id, - 'title' => $event->title, - 'body' => $event->body, - 'type' => $event->type, - 'posted_by' => $postedBy, - 'organization' => $organization, - 'created_at' => $event->created_at->toIso8601String(), - 'time_ago' => $event->created_at->diffForHumans(), + 'id' => $event->id, + 'title' => $event->title, + 'body' => $content, + 'type' => $event->type, + 'posted_by' => $postedBy, + 'organization' => $organization, + 'created_at' => $event->created_at->toIso8601String(), + 'time_ago' => $event->created_at->diffForHumans(), + 'charity_details' => $charityDetails, ]; }); @@ -164,9 +176,15 @@ public function postCharityEvent(Request $request) } $validator = \Illuminate\Support\Facades\Validator::make($request->all(), [ - 'title' => 'required|string|max:255', - 'body' => 'required|string', - 'type' => 'nullable|string|in:charity,info,warning,success', + 'title' => 'required|string|max:255', + 'body' => 'required|string', + 'type' => 'nullable|string|in:charity,info,warning,success', + 'event_date' => 'required|string', + 'start_time' => 'required|string', + 'end_time' => 'required|string', + 'provided_items' => 'required|string', + 'location_details' => 'required|string', + 'location_pin' => 'required|string|url', ]); if ($validator->fails()) { @@ -178,25 +196,49 @@ public function postCharityEvent(Request $request) } try { + $eventTime = $request->start_time . ' - ' . $request->end_time; + + $bodyJson = json_encode([ + 'type' => 'Charity', + 'provided_items' => $request->provided_items, + 'event_date' => $request->event_date, + 'event_time' => $eventTime, + 'location_details' => $request->location_details, + 'location_pin' => $request->location_pin, + 'content' => $request->body, + ]); + $event = Announcement::create([ 'title' => $request->title, - 'body' => $request->body, + 'body' => $bodyJson, 'type' => $request->type ?? 'charity', 'sponsor_id' => $sponsor->id, 'status' => 'pending', ]); + // Decode charity details for the response representation + $charityDetails = null; + $content = $event->body; + if (strpos($event->body, '{"type":"Charity"') === 0) { + $decoded = json_decode($event->body, true); + if ($decoded) { + $charityDetails = $decoded; + $content = $decoded['content'] ?? $event->body; + } + } + return response()->json([ 'success' => true, 'message' => 'Charity event posted successfully.', 'data' => [ - 'id' => $event->id, - 'title' => $event->title, - 'body' => $event->body, - 'type' => $event->type, - 'posted_by' => $sponsor->full_name, - 'organization' => $sponsor->organization_name, - 'created_at' => $event->created_at->toIso8601String(), + 'id' => $event->id, + 'title' => $event->title, + 'body' => $content, + 'type' => $event->type, + 'posted_by' => $sponsor->full_name, + 'organization' => $sponsor->organization_name, + 'created_at' => $event->created_at->toIso8601String(), + 'charity_details' => $charityDetails, ] ], 201); diff --git a/public/swagger.json b/public/swagger.json index fbb192c..8ba9b42 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -286,7 +286,13 @@ "type": "object", "required": [ "title", - "body" + "body", + "event_date", + "start_time", + "end_time", + "provided_items", + "location_details", + "location_pin" ], "properties": { "title": { @@ -306,6 +312,32 @@ "success" ], "example": "charity" + }, + "event_date": { + "type": "string", + "format": "date", + "example": "2026-06-15" + }, + "start_time": { + "type": "string", + "example": "09:00 AM" + }, + "end_time": { + "type": "string", + "example": "04:00 PM" + }, + "provided_items": { + "type": "string", + "example": "Free Dental screening, cleanings, and wellness kits" + }, + "location_details": { + "type": "string", + "example": "Al Quoz Community Hall, Dubai" + }, + "location_pin": { + "type": "string", + "format": "uri", + "example": "https://maps.app.goo.gl/xyz" } } } diff --git a/resources/js/Layouts/EmployerLayout.jsx b/resources/js/Layouts/EmployerLayout.jsx index 9935581..c841f5f 100644 --- a/resources/js/Layouts/EmployerLayout.jsx +++ b/resources/js/Layouts/EmployerLayout.jsx @@ -66,7 +66,7 @@ export default function EmployerLayout({ children, title, fullPage = false }) { { name: 'Dashboard', translationKey: 'dashboard', href: '/employer/dashboard', icon: LayoutDashboard }, { name: 'Find Workers', translationKey: 'find_workers', href: '/employer/workers', icon: Search }, { name: 'Shortlist', translationKey: 'shortlist', href: '/employer/shortlist', icon: Bookmark }, - { name: 'Candidates', translationKey: 'candidates', href: '/employer/candidates', icon: UserCheck }, + { name: 'Hired Workers', translationKey: 'candidates', href: '/employer/candidates', icon: UserCheck }, { name: 'Messages', translationKey: 'messages', href: '/employer/messages', icon: MessageSquare, badge: unread_messages_count }, { name: 'Charity Events', translationKey: 'charity_events', href: '/employer/events', icon: Heart }, { name: 'Subscription', translationKey: 'subscription', href: '/employer/subscription', icon: CreditCard }, @@ -78,7 +78,7 @@ export default function EmployerLayout({ children, title, fullPage = false }) { const mobileTabs = [ { name: 'Search', translationKey: 'search', href: '/employer/workers', icon: Search }, { name: 'Shortlist', translationKey: 'shortlist', href: '/employer/shortlist', icon: Bookmark }, - { name: 'Candidates', translationKey: 'candidates', href: '/employer/candidates', icon: UserCheck }, + { name: 'Hired Workers', translationKey: 'candidates', href: '/employer/candidates', icon: UserCheck }, { name: 'Messages', translationKey: 'messages', href: '/employer/messages', icon: MessageSquare, badge: unread_messages_count }, { name: 'Profile', translationKey: 'profile', href: '/employer/profile', icon: User }, ]; diff --git a/resources/js/Pages/Employer/Hiring/Confirm.jsx b/resources/js/Pages/Employer/Hiring/Confirm.jsx index f070e6b..baa9fae 100644 --- a/resources/js/Pages/Employer/Hiring/Confirm.jsx +++ b/resources/js/Pages/Employer/Hiring/Confirm.jsx @@ -137,7 +137,7 @@ export default function Confirm({ worker }) {

- Once you send this offer, the worker will be notified immediately. You can track the status in your Candidates page. + Once you send this offer, the worker will be notified immediately. You can track the status in your Hired Workers page.

diff --git a/resources/js/Pages/Employer/Hiring/Success.jsx b/resources/js/Pages/Employer/Hiring/Success.jsx index 9ff8e25..73d1aa5 100644 --- a/resources/js/Pages/Employer/Hiring/Success.jsx +++ b/resources/js/Pages/Employer/Hiring/Success.jsx @@ -40,7 +40,7 @@ export default function Success({ worker }) {
  • 2
    - You can track their response in your "Candidates" dashboard. + You can track their response in your "Hired Workers" dashboard.
  • @@ -50,7 +50,7 @@ export default function Success({ worker }) { href="/employer/candidates" className="w-full bg-[#185FA5] text-white py-4 rounded-xl font-black text-xs uppercase tracking-widest shadow-xl shadow-blue-500/20 hover:bg-[#144f8a] transition-all flex items-center justify-center space-x-2 group" > - Go to Candidates + Go to Hired Workers diff --git a/resources/js/Pages/Employer/SelectedCandidates.jsx b/resources/js/Pages/Employer/SelectedCandidates.jsx index c37574b..9f83085 100644 --- a/resources/js/Pages/Employer/SelectedCandidates.jsx +++ b/resources/js/Pages/Employer/SelectedCandidates.jsx @@ -125,8 +125,8 @@ export default function SelectedCandidates({ selectedWorkers }) { }, [filterLocation, filterJobType, filterAccommodation, filterNationality, filterInCountry, filterVisaType]); return ( - - + + {/* ── Filter Drawer ── */} setDrawerOpen(false)} onReset={resetFilters} activeCount={activeFilterCount} - title="Filter Candidates" + title="Filter Hired Workers" > {/* Preferred Location */} @@ -231,7 +231,7 @@ export default function SelectedCandidates({ selectedWorkers }) { {/* Header Section */}
    -

    {t('candidates_pipeline', 'Candidates')}

    +

    {t('candidates_pipeline', 'Hired Workers')}

    {t('candidates_pipeline_desc', 'Manage your workforce recruitment pipeline')}

    @@ -379,7 +379,7 @@ export default function SelectedCandidates({ selectedWorkers }) {
    {t('no_candidates_found', 'No candidates found')}
    {activeFilterCount > 0 && ( )} @@ -393,7 +393,7 @@ export default function SelectedCandidates({ selectedWorkers }) { {/* Footer */}
    - Showing {filteredWorkers.length} of {(selectedWorkers || []).filter(w => w.status !== 'Searching').length} candidates + Showing {filteredWorkers.length} of {(selectedWorkers || []).filter(w => w.status !== 'Searching').length} hired workers
    diff --git a/resources/js/Pages/Employer/Workers/Index.jsx b/resources/js/Pages/Employer/Workers/Index.jsx index fe25fad..d0f35fa 100644 --- a/resources/js/Pages/Employer/Workers/Index.jsx +++ b/resources/js/Pages/Employer/Workers/Index.jsx @@ -161,12 +161,10 @@ export default function Index({ initialWorkers = [], initialShortlistedIds = [], }); }; - const toggleMultiSelect = (item, selectedList, setSelectedList) => { - if (selectedList.includes(item)) { - setSelectedList(selectedList.filter(x => x !== item)); - } else { - setSelectedList([...selectedList, item]); - } + const toggleMultiSelect = (item, setSelectedList) => { + setSelectedList(prev => + prev.includes(item) ? prev.filter(x => x !== item) : [...prev, item] + ); }; const applyPreset = (preset) => { @@ -481,7 +479,7 @@ export default function Index({ initialWorkers = [], initialShortlistedIds = [], s.toLowerCase())} selected={selectedSkills} - onToggle={skill => toggleMultiSelect(skill, selectedSkills, setSelectedSkills)} + onToggle={skill => toggleMultiSelect(skill, setSelectedSkills)} /> )} @@ -492,7 +490,7 @@ export default function Index({ initialWorkers = [], initialShortlistedIds = [], toggleMultiSelect(lang, selectedLanguages, setSelectedLanguages)} + onToggle={lang => toggleMultiSelect(lang, setSelectedLanguages)} /> )} diff --git a/resources/js/components/Employer/FilterDrawer.jsx b/resources/js/components/Employer/FilterDrawer.jsx index 8996283..38e90e2 100644 --- a/resources/js/components/Employer/FilterDrawer.jsx +++ b/resources/js/components/Employer/FilterDrawer.jsx @@ -185,29 +185,34 @@ export function FilterChips({ options, selected, onChange }) { ); } -/** - * FilterCheckboxList — a list of checkboxes for multi-select. - * items: string[] - */ export function FilterCheckboxList({ items, selected, onToggle }) { return (
    - {items.map(item => ( - - ))} + {items.map(item => { + const isChecked = selected.includes(item); + return ( + + ); + })}
    ); } + diff --git a/resources/js/lang/en.json b/resources/js/lang/en.json index 99b70d2..f64c490 100644 --- a/resources/js/lang/en.json +++ b/resources/js/lang/en.json @@ -2,7 +2,7 @@ "dashboard": "Dashboard", "find_workers": "Find Workers", "shortlist": "Shortlist", - "candidates": "Candidates", + "candidates": "Hired Workers", "messages": "Messages", "charity_events": "Charity Events", "subscription": "Subscription", @@ -149,9 +149,9 @@ "invoice_download_desc": "Direct MOHRE Sponsor receipt downloaded in PDF format successfully.", "corporate_billing_updated": "Corporate billing details updated.", "invalid_card_format": "Invalid card number format", - "candidates_pipeline": "Candidates", + "candidates_pipeline": "Hired Workers", "candidates_pipeline_desc": "Manage your workforce recruitment pipeline", - "total_candidates": "Total Candidates", + "total_candidates": "Total Hired Workers", "reviewing": "Reviewing", "offer_sent": "Offer Sent", "hired": "Hired", @@ -164,8 +164,8 @@ "status_header": "Status", "actions_header": "Actions", "change_status_label": "Change Status", - "no_candidates_found": "No candidates found", - "showing_candidates": "Showing {start} to {end} of {total} candidates", + "no_candidates_found": "No hired workers found", + "showing_candidates": "Showing {start} to {end} of {total} hired workers", "account_settings": "Account Settings", "profile_employer_portal": "Profile - Employer Portal", "profile_updated_successfully": "Profile updated successfully", @@ -288,7 +288,7 @@ "found_workers_matching": "Found {count} domestic workers matching search", "direct_sponsoring_active": "MOHRE UAE Direct Sponsoring Active", "load_more_workers": "Load More Workers", - "no_candidates_matching": "No candidates match your filters", + "no_candidates_matching": "No hired workers match your filters", "adjust_filters_desc": "Try adjusting your salary limit, adding additional languages, or broadening nationality preferences.", "reset_filters": "Reset Filters", "comparing_workers_count": "Comparing Workers ({count} of 3)", diff --git a/resources/js/lang/hi.json b/resources/js/lang/hi.json index a033c6e..033d313 100644 --- a/resources/js/lang/hi.json +++ b/resources/js/lang/hi.json @@ -2,7 +2,7 @@ "dashboard": "डैशबोर्ड", "find_workers": "कामगार खोजें", "shortlist": "शॉर्टलिस्ट", - "candidates": "उम्मीदवार", + "candidates": "नियुक्त कर्मचारी", "messages": "संदेश", "charity_events": "दान कार्यक्रम", "subscription": "सदस्यता", @@ -149,9 +149,9 @@ "invoice_download_desc": "प्रत्यक्ष एमओएचआरई प्रायोजक रसीद पीडीएफ प्रारूप में सफलतापूर्वक डाउनलोड की गई।", "corporate_billing_updated": "कॉर्पोरेट बिलिंग विवरण अपडेट किए गए।", "invalid_card_format": "अमान्य कार्ड नंबर प्रारूप", - "candidates_pipeline": "उम्मीदवार", + "candidates_pipeline": "नियुक्त कर्मचारी", "candidates_pipeline_desc": "अपनी कार्यबल भर्ती पाइपलाइन प्रबंधित करें", - "total_candidates": "कुल उम्मीदवार", + "total_candidates": "कुल नियुक्त कर्मचारी", "reviewing": "समीक्षा की जा रही है", "offer_sent": "प्रस्ताव भेजा गया", "hired": "काम पर रखा गया", @@ -164,8 +164,8 @@ "status_header": "स्थिति", "actions_header": "कार्रवाई", "change_status_label": "स्थिति बदलें", - "no_candidates_found": "कोई उम्मीदवार नहीं मिला", - "showing_candidates": "कुल {total} उम्मीदवारों में से {start} से {end} दिखाए जा रहे हैं", + "no_candidates_found": "कोई नियुक्त कर्मचारी नहीं मिला", + "showing_candidates": "कुल {total} नियुक्त कर्मचारियों में से {start} से {end} दिखाए जा रहे हैं", "account_settings": "खाता सेटिंग्स", "profile_employer_portal": "प्रोफाइल - नियोक्ता पोर्टल", "profile_updated_successfully": "प्रोफ़ाइल सफलतापूर्वक अपडेट की गई", @@ -288,7 +288,7 @@ "found_workers_matching": "खोज से मेल खाते {count} घरेलू कामगार मिले", "direct_sponsoring_active": "MOHRE यूएई प्रत्यक्ष प्रायोजन सक्रिय", "load_more_workers": "और कामगार लोड करें", - "no_candidates_matching": "आपके फ़िल्टर से कोई उम्मीदवार मेल नहीं खाता", + "no_candidates_matching": "आपके फ़िल्टर से कोई नियुक्त कर्मचारी मेल नहीं खाता", "adjust_filters_desc": "अपनी वेतन सीमा को समायोजित करने, अतिरिक्त भाषाएं जोड़ने, या राष्ट्रीयता प्राथमिकताओं को व्यापक बनाने का प्रयास करें।", "reset_filters": "फ़िल्टर रीसेट करें", "comparing_workers_count": "कामगारों की तुलना ({count} में से 3)", diff --git a/resources/js/lang/sw.json b/resources/js/lang/sw.json index 5d36357..c262ead 100644 --- a/resources/js/lang/sw.json +++ b/resources/js/lang/sw.json @@ -2,7 +2,7 @@ "dashboard": "Dashibodi", "find_workers": "Tafuta Wafanyakazi", "shortlist": "Orodha fupi", - "candidates": "Watahiniwa", + "candidates": "Wafanyakazi Walioajiriwa", "messages": "Ujumbe", "charity_events": "Matukio ya Misaada", "subscription": "Usajili", @@ -149,9 +149,9 @@ "invoice_download_desc": "Risiti ya moja kwa moja ya Mdhamini wa MOHRE imepakuliwa katika muundo vya PDF kikamilifu.", "corporate_billing_updated": "Maelezo ya malipo ya kampuni yamesasishwa.", "invalid_card_format": "Nambari ya kadi sio sahihi", - "candidates_pipeline": "Watahiniwa", + "candidates_pipeline": "Wafanyakazi Walioajiriwa", "candidates_pipeline_desc": "Dhibiti mfumo wako wa uajiri wa wafanyakazi", - "total_candidates": "Jumla ya Watahiniwa", + "total_candidates": "Jumla ya Wafanyakazi Walioajiriwa", "reviewing": "Kuhakiki", "offer_sent": "Ofa Imetumwa", "hired": "Ameajiriwa", @@ -164,8 +164,8 @@ "status_header": "Hali", "actions_header": "Vitendo", "change_status_label": "Badilisha Hali", - "no_candidates_found": "Hakuna watahiniwa waliopatikana", - "showing_candidates": "Inaonyesha watahiniwa {start} hadi {end} kati ya {total}", + "no_candidates_found": "Hakuna wafanyakazi walioajiriwa waliopatikana", + "showing_candidates": "Inaonyesha wafanyakazi walioajiriwa {start} hadi {end} kati ya {total}", "account_settings": "Mipangilio ya Akaunti", "profile_employer_portal": "Wasifu - Tovuti ya Mwajiri", "profile_updated_successfully": "Wasifu umesasishwa kikamilifu", @@ -288,7 +288,7 @@ "found_workers_matching": "Imepata wafanyakazi wa nyumbani {count} wanaolingana na utafutaji", "direct_sponsoring_active": "Ufadhili wa Moja kwa Moja wa MOHRE UAE Umerejeshwa", "load_more_workers": "Pakia Wafanyakazi Zaidi", - "no_candidates_matching": "Hakuna watahiniwa wanaolingana na vichujio vyako", + "no_candidates_matching": "Hakuna wafanyakazi walioajiriwa wanaolingana na vichujio vyako", "adjust_filters_desc": "Jaribu kurekebisha kikomo chako cha mshahara, kuongeza lugha za ziada, au kupanua mapendeleo ya uraia.", "reset_filters": "Weka upya Vichujio", "comparing_workers_count": "Kulinganisha Wafanyakazi ({count} kati ya 3)", diff --git a/resources/js/lang/ta.json b/resources/js/lang/ta.json index 90a720e..0eecb54 100644 --- a/resources/js/lang/ta.json +++ b/resources/js/lang/ta.json @@ -2,7 +2,7 @@ "dashboard": "டாஷ்போர்டு", "find_workers": "பணியாளர்களைக் கண்டறியவும்", "shortlist": "சுருக்கப்பட்டியல்", - "candidates": "வேட்பாளர்கள்", + "candidates": "பணியமர்த்தப்பட்டவர்கள்", "messages": "செய்திகள்", "charity_events": "அறக்கட்டளை நிகழ்வுகள்", "subscription": "சந்தா", @@ -149,9 +149,9 @@ "invoice_download_desc": "நேரடி MOHRE முதலாளி ரசீது PDF வடிவத்தில் வெற்றிகரமாக பதிவிறக்கம் செய்யப்பட்டது.", "corporate_billing_updated": "கார்ப்பரேட் பில்லிங் விவரங்கள் புதுப்பிக்கப்பட்டன.", "invalid_card_format": "தவறான அட்டை எண் வடிவம்", - "candidates_pipeline": "வேட்பாளர்கள்", + "candidates_pipeline": "பணியமர்த்தப்பட்டவர்கள்", "candidates_pipeline_desc": "உங்கள் பணியாளர் நியமனக் குழாயை நிர்வகிக்கவும்", - "total_candidates": "மொத்த வேட்பாளர்கள்", + "total_candidates": "ஒட்டுமொத்த பணியமர்த்தப்பட்டவர்கள்", "reviewing": "மதிப்பாய்வு செய்யப்படுகிறது", "offer_sent": "சலுகை அனுப்பப்பட்டது", "hired": "பணியமர்த்தப்பட்டார்", @@ -164,8 +164,8 @@ "status_header": "நிலை", "actions_header": "செயல்கள்", "change_status_label": "நிலையை மாற்று", - "no_candidates_found": "வேட்பாளர்கள் யாரும் இல்லை", - "showing_candidates": "மொத்த {total} வேட்பாளர்களில் {start} முதல் {end} வரை காட்டுகிறது", + "no_candidates_found": "பணியமர்த்தப்பட்டவர்கள் யாரும் இல்லை", + "showing_candidates": "மொத்த {total} பணியமர்த்தப்பட்டவர்களில் {start} முதல் {end} வரை காட்டுகிறது", "account_settings": "கணக்கு அமைப்புகள்", "profile_employer_portal": "சுயவிவரம் - முதலாளி போர்டல்", "profile_updated_successfully": "சுயவிவரம் வெற்றிகரமாக புதுப்பிக்கப்பட்டது", @@ -288,7 +288,7 @@ "found_workers_matching": "தேடலுக்குப் பொருத்தமான {count} வீட்டுப் பணியாளர்கள் கண்டறியப்பட்டனர்", "direct_sponsoring_active": "MOHRE யுஏஇ நேரடி ஸ்பான்சர்ஷிப் செயலில் உள்ளது", "load_more_workers": "மேலும் பணியாளர்களைக் காட்டு", - "no_candidates_matching": "உங்கள் வடிகட்டிகளுடன் பொருந்தும் வேட்பாளர்கள் யாரும் இல்லை", + "no_candidates_matching": "உங்கள் வடிகட்டிகளுடன் பொருந்தும் பணியமர்த்தப்பட்டவர்கள் யாரும் இல்லை", "adjust_filters_desc": "உங்கள் சம்பள வரம்பை சரிசெய்யவும், கூடுதல் மொழிகளைச் சேர்க்கவும் அல்லது குடியுரிமை விருப்பங்களை விரிவுபடுத்தவும்.", "reset_filters": "வடிகட்டிகளை மீட்டமை", "comparing_workers_count": "பணியாளர்களை ஒப்பிடுதல் ({count} இல் 3)", diff --git a/resources/js/lang/tl.json b/resources/js/lang/tl.json index e042376..3b5f6e6 100644 --- a/resources/js/lang/tl.json +++ b/resources/js/lang/tl.json @@ -2,7 +2,7 @@ "dashboard": "Dashboard", "find_workers": "Maghanap ng mga Manggagawa", "shortlist": "Shortlist", - "candidates": "Mga Kandidato", + "candidates": "Mga Manggagawang Na-hire", "messages": "Mga Mensahe", "charity_events": "Mga Kaganapang Kawanggawa", "subscription": "Susunod", @@ -149,9 +149,9 @@ "invoice_download_desc": "Matagumpay na na-download ang direktang resibo ng MOHRE Sponsor sa format na PDF.", "corporate_billing_updated": "Na-update ang mga detalye ng billing ng kumpanya.", "invalid_card_format": "Maling format ng numero ng card", - "candidates_pipeline": "Mga Kandidato", + "candidates_pipeline": "Mga Manggagawang Na-hire", "candidates_pipeline_desc": "Pamahalaan ang iyong pipeline ng pangangalap ng mga tauhan", - "total_candidates": "Kabuuang mga Kandidato", + "total_candidates": "Kabuuang mga Manggagawang Na-hire", "reviewing": "Sinusuri", "offer_sent": "Naipadala na ang Alok", "hired": "Na-hire", @@ -164,8 +164,8 @@ "status_header": "Katayuan", "actions_header": "Mga Aksyon", "change_status_label": "Baguhin ang Katayuan", - "no_candidates_found": "Walang nahanap na mga kandidato", - "showing_candidates": "Ipinapakita ang {start} hanggang {end} ng {total} na mga kandidato", + "no_candidates_found": "Walang nahanap na mga manggagawang na-hire", + "showing_candidates": "Ipinapakita ang {start} hanggang {end} ng {total} na mga manggagawang na-hire", "account_settings": "Mga Setting ng Account", "profile_employer_portal": "Profile - Portal ng Employer", "profile_updated_successfully": "Matagumpay na na-update ang profile", @@ -288,7 +288,7 @@ "found_workers_matching": "Nakahanap ng {count} na kasambahay na tumutugma sa iyong paghahanap", "direct_sponsoring_active": "Aktibo ang Direktang Sponsor ng MOHRE UAE", "load_more_workers": "Mag-load ng Higit Pang Manggagawa", - "no_candidates_matching": "Walang mga kandidatong tumutugma sa iyong mga filter", + "no_candidates_matching": "Walang mga manggagawang na-hire na tumutugma sa iyong mga filter", "adjust_filters_desc": "Subukang i-adjust ang iyong limitasyon sa sahod, magdagdag ng mga karagdagdang wika, o palawakin ang mga kagustuhan sa nasyonalidad.", "reset_filters": "I-reset ang mga Filter", "comparing_workers_count": "Inihahambing ang mga Manggagawa ({count} sa 3)", diff --git a/tests/Feature/SponsorAuthApiTest.php b/tests/Feature/SponsorAuthApiTest.php index e6565fd..03e69cf 100644 --- a/tests/Feature/SponsorAuthApiTest.php +++ b/tests/Feature/SponsorAuthApiTest.php @@ -184,15 +184,37 @@ public function test_sponsor_can_post_charity_event() $response = $this->withHeaders([ 'Authorization' => 'Bearer sponsor_token_xyz', ])->postJson('/api/sponsors/charity-events', [ - 'title' => 'Community Ramadan Iftar', - 'body' => 'Join us for a free community Iftar gathering at the center.', - 'type' => 'charity', + 'title' => 'Community Ramadan Iftar', + 'body' => 'Join us for a free community Iftar gathering at the center.', + 'type' => 'charity', + 'event_date' => '2026-06-15', + 'start_time' => '09:00 AM', + 'end_time' => '04:00 PM', + 'provided_items' => 'Free Iftar meals, Water, Dates', + 'location_details' => 'Al Quoz Community Center, Dubai', + 'location_pin' => 'https://maps.app.goo.gl/xyz', ]); $response->assertStatus(201) ->assertJson([ 'success' => true, 'message' => 'Charity event posted successfully.', + 'data' => [ + 'title' => 'Community Ramadan Iftar', + 'body' => 'Join us for a free community Iftar gathering at the center.', + 'type' => 'charity', + 'posted_by' => 'Test Sponsor', + 'organization' => 'Save the Children', + 'charity_details' => [ + 'type' => 'Charity', + 'provided_items' => 'Free Iftar meals, Water, Dates', + 'event_date' => '2026-06-15', + 'event_time' => '09:00 AM - 04:00 PM', + 'location_details' => 'Al Quoz Community Center, Dubai', + 'location_pin' => 'https://maps.app.goo.gl/xyz', + 'content' => 'Join us for a free community Iftar gathering at the center.', + ] + ] ]) ->assertJsonStructure([ 'data' => [ @@ -203,6 +225,15 @@ public function test_sponsor_can_post_charity_event() 'posted_by', 'organization', 'created_at', + 'charity_details' => [ + 'type', + 'provided_items', + 'event_date', + 'event_time', + 'location_details', + 'location_pin', + 'content', + ] ] ]); diff --git a/vite.config.js b/vite.config.js index a8a6c63..b36d5b9 100644 --- a/vite.config.js +++ b/vite.config.js @@ -23,7 +23,7 @@ export default defineConfig({ port: 5173, cors: true, hmr: { - host: '192.168.0.203', + host: '10.150.39.221', }, watch: { ignored: ['**/storage/framework/views/**'],