diff --git a/Modules/Internal/Http/Controllers/Api/CorporateController.php b/Modules/Internal/Http/Controllers/Api/CorporateController.php index 9b8bf00d..bf04eb7f 100644 --- a/Modules/Internal/Http/Controllers/Api/CorporateController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporateController.php @@ -25,6 +25,7 @@ use Illuminate\Support\Facades\File as FacadesFile; use Illuminate\Support\Facades\Response; use Illuminate\Support\Facades\Storage; use Modules\Internal\Services\CorporateService; +use App\Models\FilesDoc; class CorporateController extends Controller { @@ -717,5 +718,69 @@ class CorporateController extends Controller return $corporates; } + + public function addFilesDoc(Request $request) + { + $request->validate([ + 'corporate_id' => 'required' + ]); + if ($request->hasFile('result_files')) { + $pathFile = File::storeFile('docs', $request->corporate_id, $request->result_files); + $data = [ + 'corporate_id' => $request->corporate_id, + 'original_name' => $request->result_files->getClientOriginalName(), + 'path' => $pathFile, + 'created_by' => auth()->user()->id, + 'updated_by' => auth()->user()->id + ]; + FilesDoc::create($data); + return Helper::responseJson(data: $request->toArray(), message: 'Berhasil tambah file '.$data['original_name']); + } + else + { + return Helper::responseJson(data: $request->toArray(), message: 'Tidak ada file yang ditambahkan'); + } + + } + + public function getFilesDoc(Request $request) + { + $request->validate([ + 'corporate_id' => 'required' + ]); + $datas = FilesDoc::where('corporate_id', $request->corporate_id) + ->select('original_name', \DB::raw("CONCAT('" . env('APP_URL') . "/storage/', path) as path"), 'status_download') + ->orderBy('id', 'desc') + //->limit(1) + ->get(); + if ($datas->isEmpty()) { + return Helper::responseJson(data: [], message: 'Tidak ada data'); + } + return Helper::responseJson(data: $datas, message: 'Berhasil mendapatkan data'); + } + + public function updateStatusFilesDoc(Request $request) + { + $request->validate([ + 'status_download' => 'required', + 'corporate_id' => 'required' + ]); + + $data_requests = [ + 'status_download' => $request->status_download + ]; + + FilesDoc::where('corporate_id', $request->corporate_id) + ->update($data_requests); + + $datas = FilesDoc::where('corporate_id', $request->corporate_id) + ->select('status_download') + ->orderBy('id', 'desc') + ->limit(1) + ->get(); + + return Helper::responseJson(data: $datas, message: 'Berhasil update status download menjadi '.($request->status_download == 0 ? 'Inactive' : 'Active')); + + } } diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index d55c5f42..ed902d74 100644 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -116,6 +116,11 @@ Route::prefix('internal')->group(function () { Route::get('corporates/{corporate_id}/formulariums', [CorporateFormulariumController::class, 'index']); Route::put('corporates/{corporate_id}/formulariums/{formularium_id}/{action}', [CorporateFormulariumController::class, 'updateStatus']); + Route::controller(CorporateController::class)->group(function () { + Route::post('add-files-doc', 'addFilesDoc'); + Route::post('get-files-doc', 'getFilesDoc'); + Route::post('update-status-files-doc', 'updateStatusFilesDoc'); + }); // Route::get('corporates/{corporate_id}/diagnosis-exclusions', [DiagnosisExclusionController::class, 'index']); // Route::get('corporates/{corporate_id}/diagnosis-exclusions/import', [DiagnosisExclusionController::class, 'import']); diff --git a/app/Models/File.php b/app/Models/File.php index c7613dfd..6bf0952f 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -43,6 +43,7 @@ class File extends Model 'claim-result' => 'claim/', 'claim-diagnosis' => 'claim/', 'claim-kondisi' => 'claim/', + 'docs' => 'docs/', ]; public function fileable() diff --git a/app/Models/FilesDoc.php b/app/Models/FilesDoc.php new file mode 100644 index 00000000..6c22f666 --- /dev/null +++ b/app/Models/FilesDoc.php @@ -0,0 +1,14 @@ +increments('id'); + $table->bigInteger('corporate_id'); + $table->string('original_name', 255); + $table->string('path', 255); + $table->bigInteger('created_by'); + $table->bigInteger('updated_by'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('files_doc'); + } +}; diff --git a/database/migrations/2023_09_19_111722_add_field_status_download_to_files_doc.php b/database/migrations/2023_09_19_111722_add_field_status_download_to_files_doc.php new file mode 100644 index 00000000..48677b8d --- /dev/null +++ b/database/migrations/2023_09_19_111722_add_field_status_download_to_files_doc.php @@ -0,0 +1,32 @@ +tinyInteger('status_download')->default(0)->after('path'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('files_doc', function (Blueprint $table) { + $table->dropColumn('status_download'); + }); + } +}; diff --git a/frontend/dashboard/src/pages/Corporates/Show.tsx b/frontend/dashboard/src/pages/Corporates/Show.tsx index 6e3325e1..74de84df 100644 --- a/frontend/dashboard/src/pages/Corporates/Show.tsx +++ b/frontend/dashboard/src/pages/Corporates/Show.tsx @@ -19,6 +19,10 @@ import HeaderBreadcrumbs from '../../components/HeaderBreadcrumbs'; import CorporateTabNavigations from './CorporateTabNavigations'; import { fCurrency } from '../../utils/formatNumber'; import { ConfiguredCorporateContext } from '@/contexts/ConfiguredCorporateContext'; +import Iconify from '@/components/Iconify'; +import { LoadingButton } from '@mui/lab'; +import { makeFormData } from '@/utils/jsonToFormData'; +import { enqueueSnackbar } from 'notistack'; export default function Corporates() { const { themeStretch } = useSettings(); @@ -29,11 +33,90 @@ export default function Corporates() { useEffect(() => { setCorporate(configuredCorporateContext.currentCorporate); - }, [configuredCorporateContext]) + getFilesDoc(corporate_id); + }, [configuredCorporateContext, corporate_id]) const headStyle = { fontWeight: 'bold', - }; + }; + // Upload Docs + const fileDocsInput = useRef(null); + const [fileDocs, setFileDocs] = useState([]); + const [showAll, setShowAll] = useState(false); + const [isActive, setIsActive] = useState(false); + const handleDocsInputChange = (corporate_id) => (event) => { + if(event.target.files[0] && corporate_id) + { + const updatedFiles = Array.from(event.target.files).map((file) => ({ + file + })); + submitUploadDocs(corporate_id, updatedFiles); + } + }; + function submitUploadDocs(corporate_id, files) + { + if(files.length > 0) + { + files.map((file, index) => { + const formData = makeFormData( + { + corporate_id : corporate_id, + result_files : file['file'] + } + ); + axios + .post('/add-files-doc', formData) + .then((response) => { + getFilesDoc(corporate_id); + enqueueSnackbar(response.data.message, { variant: 'success' }); + }) + .catch((error) => { + enqueueSnackbar(error.response.data.errors[0], { variant: 'error' }); + }); + }); + } + } + function getFilesDoc(corporate_id) + { + axios + .post('/get-files-doc',{corporate_id:corporate_id}) + .then((response) => { + setFileDocs(response.data.data); + if(response.data.data[0]['status_download'] == 1) + { + setIsActive(!isActive); + } + else + { + setIsActive(isActive); + } + }) + .catch((error) => { + enqueueSnackbar(error.response.data.errors[0], { variant: 'error' }); + }); + } + + const toggleButton = () => { + setIsActive(!isActive); + let statusDownload = 0; + if(!isActive) + { + statusDownload = 1; + } + else + { + statusDownload = 0; + } + axios + .post('/update-status-files-doc', {status_download : statusDownload, corporate_id : corporate_id}) + .then((response) => { + enqueueSnackbar(response.data.message, { variant: 'success' }); + }) + .catch((error) => { + enqueueSnackbar(error.response.data.errors[0], { variant: 'error' }); + }); + }; + // End Upload Docs return ( @@ -107,6 +190,114 @@ export default function Corporates() { + Docs (T&C) + + + + {fileDocs.length > 0 && ( + + ASO members can download or not? + + + + + )} + {fileDocs.slice(0, showAll ? fileDocs.length : 1).map((file, index) => ( + + + + {file.original_name} + + + {!showAll && ( + + + { + handleDocsInputChange(corporate_id)(event); + }} + accept="application/pdf" + multiple + /> + + + + + )} + + ))} + {!showAll && fileDocs.length > 1 && ( + + + setShowAll(true)} style={{ color: 'blue', cursor: 'pointer' }}>Lihat Semua Data + + + )} + {showAll && ( + + + setShowAll(false)} style={{ color: 'blue', cursor: 'pointer' }}>Sembunyikan Data + + + )} + {fileDocs.length <= 0 && ( + + Please add a Terms & Conditions document + + + { + handleDocsInputChange(corporate_id)(event); + }} + accept="application/pdf" + // multiple + /> + { + fileDocsInput.current.click(); + }} + > + + Add Docs + + + + + )} + +
+ + +