10 KiB
Modul Kerja Sama - Dokumentasi
Overview
Modul Kerja Sama adalah sistem manajemen kerjasama antara Admin dan Media Partner. Modul ini mengelola seluruh flow dari pengajuan kerjasama hingga pelaporan.
Flow Kerja Sama
1. Admin Mengajukan Kerja Sama
- Admin membuat data Cooperation baru dengan informasi:
- Judul Kerja Sama
- Tanggal Pengajuan Awal (initial_submission_date)
- Tanggal Pengajuan Akhir (final_submission_date)
- Deadline Penugasan (assignment_deadline)
- Deadline Verifikasi (verification_deadline)
- Deskripsi
- Admin mengirim pengajuan ke Media Partner (CooperationMedia)
- Status awal: MENUNGGU
2. Media Menerima/Menolak Pengajuan
- Media mereview pengajuan kerjasama dalam periode initial_submission_date sampai final_submission_date
- Media dapat:
- MENERIMA: Status berubah menjadi ACCEPTED, lanjut ke step 3
- MENOLAK: Status berubah menjadi REJECTED, flow selesai (dengan alasan penolakan/rejection reason)
3. Media Mengajukan Proposal
- Jika Media menerima, Media mengajukan proposal (CooperationProposal)
- Proposal berisi:
- Deskripsi
- Tanggal mulai dan akhir proposed
- E-Catalog
- File dokumen (via Spatie Media Library)
- Jurnalis yang terlibat
- Status proposal: MENUNGGU
4. Admin Meninjau Proposal
- Admin mereview proposal yang diajukan Media
- Admin dapat:
- MENERIMA: Status proposal menjadi ACCEPTED, lanjut ke step 5
- MENOLAK: Status proposal menjadi REJECTED, Media harus ajukan ulang (dengan alasan penolakan)
5. Admin Kirim Penugasan
- Jika Admin menerima proposal, Admin membuat Task Assignment
- Task Assignment berisi:
- Start Date
- End Date
- Task Description
- Report Amount (jumlah report yang harus dibuat)
- Admin assign task ke Media Partner (TaskAssignmentMedia)
- Status: MENUNGGU
6. Media Mengirim Laporan
- Media membuat Report berdasarkan Task Assignment
- Report berisi:
- Title
- Publication Date
- Link
- Description
- Image (via Spatie Media Library)
- Status report: MENUNGGU (untuk verifikasi admin)
- Media dapat membuat multiple reports sesuai report_amount yang diminta
7. Admin Menerima/Menolak Laporan
- Admin mereview laporan yang dikirim Media
- Admin dapat:
- MENERIMA: Status report menjadi ACCEPTED
- MENOLAK: Status report menjadi REJECTED, Media harus kirim ulang (dengan alasan penolakan)
Status Otomatis Berdasarkan Deadline
Status Cooperation (otomatis berubah berdasarkan waktu):
- MENUNGGU: Status awal ketika admin kirim kerja sama
- PENUGASAN: Ketika tanggal final_submission_date habis (media sudah tidak bisa ajukan proposal)
- VERIFIKASI: Ketika assignment_deadline habis (media sudah selesai kirim laporan)
- PEMBAYARAN: Ketika verification_deadline habis (admin sudah selesai verifikasi laporan)
- COMPLETED: Ketika pembayaran sudah selesai (payment_date diisi)
Status Individual Components:
- ACCEPTED: Diterima (untuk proposal, report, dll)
- REJECTED: Ditolak (untuk proposal, report, dll) - selalu dengan alasan penolakan
Database Schema
Table: cooperations
- id
- title (varchar 200)
- initial_submission_date (date) - Tanggal mulai pengajuan proposal
- final_submission_date (date) - Tanggal akhir pengajuan proposal
- assignment_deadline (date, nullable) - Deadline penyelesaian penugasan
- verification_deadline (date, nullable) - Deadline verifikasi laporan
- description (text)
- payment_amount (unsigned integer, nullable) - Jumlah pembayaran
- payment_date (date, nullable) - Tanggal pembayaran
- status (enum: MENUNGGU, PENUGASAN, VERIFIKASI, PEMBAYARAN, COMPLETED, ACCEPTED, REJECTED)
- created_at, updated_at, deleted_at
Table: cooperation_media (Pivot)
- id
- cooperation_id (FK)
- partner_media_id (FK)
- status (enum: PENDING, ACCEPTED, REJECTED)
- created_at, updated_at
Table: cooperation_proposals
- id
- cooperation_id (FK)
- partner_media_id (FK)
- description (text, nullable)
- e_catalog (varchar 50, nullable)
- status (enum: PENDING, ACCEPTED, REJECTED)
- created_at, updated_at
Table: task_assignments
- id
- cooperation_id (FK)
- start_date (date)
- end_date (date)
- task_description (text)
- report_amount (unsigned integer)
- status (enum: PENDING, ACCEPTED, REJECTED)
- created_at, updated_at
Table: task_assignment_media (Pivot)
- id
- task_assignment_id (FK)
- partner_media_id (FK)
- status (enum: PENDING, ACCEPTED, REJECTED)
- created_at, updated_at
Table: reports
- id
- task_assignment_id (FK)
- title (varchar 200)
- publication_date (date)
- link (varchar 50, nullable)
- description (text, nullable)
- status (enum: MENUNGGU, ACCEPTED, REJECTED)
- created_at, updated_at, deleted_at
- Media files (handled by Spatie Media Library)
Table: rejection_reasons (Polymorphic)
- id
- rejectable_type (morphs)
- rejectable_id (morphs)
- reason (text)
- created_at, updated_at
Models
Cooperation
Location: app/Models/Cooperation.php
Relationships:
partnerMedia(): BelongsToMany - Media yang terlibat dalam kerjasamacooperationMedia(): HasMany - Pivot records dengan statuscooperationProposals(): HasMany - Proposal yang diupload mediataskAssignment(): HasOne - Task yang diberikan ke media
CooperationMedia (Pivot)
Location: app/Models/CooperationMedia.php
Relationships:
cooperation(): BelongsTopartnerMedia(): BelongsTorejectionReasons(): MorphMany
CooperationProposal
Location: app/Models/CooperationProposal.php
Relationships:
cooperation(): BelongsTopartnerMedia(): BelongsTorejectionReasons(): MorphMany
TaskAssignment
Location: app/Models/TaskAssignment.php
Relationships:
cooperation(): BelongsTopartnerMedia(): BelongsToMany (via task_assignment_media)taskAssignmentMedia(): HasManyrejectionReasons(): MorphManyreports(): HasMany (commented, needs to be uncommented)
Report
Location: app/Models/Report.php
Relationships:
taskAssignment(): BelongsTorejectionReasons(): MorphMany
Implements: HasMedia (Spatie Media Library) untuk handle image dan file attachments
Implements: HasMedia (Spatie Media Library)
RejectionReason
Location: app/Models/RejectionReason.php
Relationships:
rejectable(): MorphTo - Dapat digunakan untuk CooperationMedia, CooperationProposal, TaskAssignment, Report
Filament Resources
CooperationResource
Location: app/Filament/Resources/Manage/Cooperations/CooperationResource.php
Navigation:
- Group: Manage
- Label: Kerja Sama
- Icon: HandRaised
- Sort: 20
- Slug: manage/cooperations
Pages:
- List:
/manage/cooperations - Create:
/manage/cooperations/create - Edit:
/manage/cooperations/{record}/edit
Form Fields (CooperationForm):
- Title (required, max 200)
- Initial Submission Date (required, date)
- Final Submission Date (required, date, after initial_submission_date)
- Description (required, textarea)
Table Columns (CooperationsTable):
- Title
- Initial Submission Date
- Final Submission Date
- Description
- Created At
- Updated At
Status Enum
CooperationStatus
Location: app/Enums/CooperationStatus.php
Values:
MENUNGGU(1): Menunggu - Status awal kerja samaPENUGASAN(2): Penugasan - Ketika deadline proposal habisVERIFIKASI(3): Verifikasi - Ketika deadline penugasan habisPEMBAYARAN(4): Pembayaran - Ketika verifikasi selesaiCOMPLETED(5): Selesai - Ketika pembayaran selesaiACCEPTED(6): Diterima - Untuk proposal/report yang diterimaREJECTED(7): Ditolak - Untuk proposal/report yang ditolak
Colors:
- MENUNGGU: warning (yellow)
- PENUGASAN: info (blue)
- VERIFIKASI: primary (blue)
- PEMBAYARAN: secondary (gray)
- COMPLETED: success (green)
- ACCEPTED: success (green)
- REJECTED: danger (red)
Next Steps / TODO
- Uncomment Report Relationship di TaskAssignment model
- Fix Status Colors di CooperationStatus enum (ACCEPTED should be success, REJECTED should be danger)
- Create Relation Managers untuk:
- CooperationMedia (di Cooperation Resource)
- CooperationProposal (di Cooperation Resource)
- TaskAssignment (di Cooperation Resource)
- Report (di TaskAssignment Resource)
- Create Custom Actions untuk:
- Send to Media (dari Cooperation)
- Accept/Reject Cooperation (dari Media side)
- Upload Proposal (dari Media side)
- Accept/Reject Proposal (dari Admin side)
- Create Task Assignment (dari Admin side)
- Create Report (dari Media side)
- Add Permissions untuk role Admin dan Media
- Create Notifications untuk setiap perubahan status
- Add Validation untuk memastikan flow berjalan dengan benar
- Create Dashboard Widgets untuk monitoring kerjasama
File Structure
app/
├── Enums/
│ └── CooperationStatus.php
├── Filament/
│ └── Resources/
│ └── Manage/
│ └── Cooperations/
│ ├── CooperationResource.php
│ ├── Pages/
│ │ ├── ListCooperations.php
│ │ ├── CreateCooperation.php
│ │ └── EditCooperation.php
│ ├── Schemas/
│ │ └── CooperationForm.php
│ └── Tables/
│ └── CooperationsTable.php
└── Models/
├── Cooperation.php
├── CooperationMedia.php
├── CooperationProposal.php
├── TaskAssignment.php
├── Report.php
└── RejectionReason.php
database/
└── migrations/
├── 2025_12_12_111212_create_cooperations_table.php
├── 2025_12_12_111307_create_cooperation_media_table.php
├── 2025_12_12_132245_create_cooperation_proposals_table.php
├── 2025_12_12_132453_create_task_assignments_table.php
├── 2025_12_12_133823_create_media_task_assignment_table.php
├── 2025_12_12_135847_create_reports_table.php
└── 2025_12_12_135855_create_rejection_reasons_table.php
Notes
- Semua tabel sudah di-migrate
- Model Cooperation sudah dilengkapi dengan relationships
- Resource Cooperation sudah dibuat dan siap digunakan
- Typo di migration task_assignments sudah diperbaiki (task_description dari date ke text)
- Icon Handshake diganti dengan HandRaised karena tidak tersedia di Heroicon