From 35dc949f9e80f528fc4d2ac27dfad5809c61b973 Mon Sep 17 00:00:00 2001 From: Ilham Wara Nugroho Date: Tue, 6 Jan 2026 11:53:06 +0700 Subject: [PATCH] update --- app/Console/Commands/CopyActivityQueue.php | 127 + .../Commands/EmisiCalculationQueue.php | 214 + .../Commands/EmisiCalculationQueue.php.bak | 214 + .../Commands/ProdusenCalculateQueue.php | 124 + app/Enums/ActivityType.php | 42 + app/Enums/FruitVegetableCategory.php | 74 + app/Enums/GcomCrfData.php | 159 + app/Enums/LandCategory.php | 37 + app/Enums/LandType.php | 42 + app/Enums/LingkupAksesData.php | 26 + app/Enums/Sector.php | 37 + app/Enums/SigdStatus.php | 22 + app/Enums/TransportationCategory.php | 52 + app/Enums/WsCategory.php | 41 + app/Exports/CrfExport.php | 105 + app/Exports/FormExport.php | 192 + app/Exports/FormKehutananExport.php | 188 + app/Exports/GcomCrfExport.php | 104 + app/Exports/GpcOutputExport.php | 119 + app/Exports/WorksheetExport.php | 105 + app/Helpers/FormulaEvaluator.php | 56 + app/Helpers/FormulaHelper.php | 46 + app/Helpers/custom.php | 2 +- .../Activity/FormAdaptasiController.php | 388 + .../Controllers/Activity/FormController.php | 311 + .../Activity/FormKehutananController.php | 216 + .../Activity/FormMetadataController.php | 59 + .../Activity/FormMitigasiController.php | 777 + .../Activity/LivestockManureController.php | 184 + .../DashboardInventoryController.php | 27 +- .../Emisi/Agriculture3A2bController.php | 30 + .../Emisi/Agriculture3AController.php | 31 + .../Emisi/Agriculture3C1Controller.php | 31 + .../Emisi/Agriculture3C3Controller.php | 30 + .../Emisi/Agriculture3C4Controller.php | 28 + .../Emisi/Agriculture3C5Controller.php | 28 + .../Emisi/Agriculture3C6Controller.php | 30 + .../Controllers/Emisi/Energy1AController.php | 28 + .../Controllers/Emisi/EnergyGPCController.php | 26 + .../Controllers/Emisi/Folu3BController.php | 48 + .../Emisi/GpcMappingController.php | 26 + .../Controllers/Emisi/Waste4AController.php | 26 + .../Emisi/Waste4AMethaneController.php | 27 + .../Emisi/Waste4APreController.php | 27 + .../Controllers/Emisi/Waste4B1Controller.php | 30 + .../Controllers/Emisi/Waste4B2Controller.php | 30 + .../Controllers/Emisi/Waste4C1Controller.php | 26 + .../Controllers/Emisi/Waste4C2aController.php | 27 + .../Controllers/Emisi/Waste4C2bController.php | 27 + .../Controllers/Emisi/Waste4C2cController.php | 27 + .../Controllers/Emisi/Waste4D1aController.php | 27 + .../Controllers/Emisi/Waste4D1cController.php | 27 + .../Controllers/Emisi/Waste4D1dController.php | 27 + .../Controllers/Emisi/Waste4D1eController.php | 27 + .../Energi/BahanBakarListrikController.php | 65 - .../Energi/EmisiBatuBaraController.php | 65 - .../Energi/EmisiMigasController.php | 65 - .../Energi/EnergiLainnyaController.php | 65 - .../Energi/IndustriManufakturController.php | 65 - .../Energi/KomersialController.php | 65 - .../Energi/ListrikPlnController.php | 65 - .../Energi/PembangkitListrikController.php | 65 - .../Energi/PenggunaanListrikController.php | 65 - .../Energi/PenyulinganController.php | 65 - .../Energi/RumahTanggaController.php | 65 - .../Energi/TransmisiDistribusiController.php | 65 - .../Energi/TransportasiController.php | 65 - .../IPPU/KarbonatKacaController.php | 65 - .../IPPU/KarbonatKeramikController.php | 65 - .../IPPU/KarbonatLainnyaController.php | 65 - .../IPPU/KarbonatMakananController.php | 65 - .../IPPU/KarbonatPulpController.php | 65 - .../IPPU/PelumasParafinController.php | 65 - .../Controllers/IPPU/PenggunaAcController.php | 65 - .../Controllers/IPPU/ProduksiController.php | 65 - .../Controllers/Kalkulasi/CRFController.php | 209 - .../Controllers/Kalkulasi/GCOMController.php | 209 - .../Controllers/Kalkulasi/GPCController.php | 209 - .../Kalkulasi/HitungProdusenController.php | 209 - .../Kalkulasi/KalkulasiEmisiController.php | 209 - .../Kalkulasi/KunciAktifitasController.php | 209 - .../Kalkulasi/SalinAktifitasController.php | 209 - .../Kalkulasi/WorksheetController.php | 209 - .../DistribusiSampahDomestikController.php | 65 - .../Limbah/KependudukanController.php | 65 - .../KomposisiSampahDomestikController.php | 65 - .../Limbah/LimbahCairIndustriController.php | 65 - .../SaranaAirLimbahDomestikController.php | 65 - .../Limbah/TimbulanSampahController.php | 65 - .../Controllers/Master/AgencyController.php | 65 - .../Controllers/Pengaturan/ARController.php | 187 - .../Controllers/Pengaturan/EFController.php | 202 - .../Controllers/Pengaturan/GHGController.php | 187 - .../Controllers/Pengaturan/GWPController.php | 211 - .../Pengaturan/KategoriController.php | 170 - .../Pengaturan/PengumumanController.php | 209 - .../Pengaturan/SumberDataEFController.php | 187 - .../Controllers/Pengaturan/UnitController.php | 180 - .../Pengaturan/UnitKonversiController.php | 198 - .../Pengaturan/UploadAktifitasController.php | 219 - .../Pertanian/HortikulturaController.php | 65 - .../Pertanian/KehilanganKayuController.php | 65 - .../Pertanian/KonsumsiPupukController.php | 65 - .../Pertanian/KotoranTernakController.php | 65 - .../Pertanian/LahanPemukimanController.php | 65 - .../Pertanian/PengairanSawahController.php | 65 - .../Pertanian/PopulasiTernakController.php | 65 - .../Controllers/Pertanian/SawahController.php | 65 - .../Pertanian/SistemAirController.php | 65 - .../Pertanian/TanamanPanganController.php | 65 - .../Pertanian/TransisiController.php | 65 - .../Controllers/Reports/CrfController.php | 78 + .../Controllers/Reports/GcomCrfController.php | 78 + .../Reports/GpcOutputController.php | 69 + .../Reports/WorksheetController.php | 93 + app/Http/Controllers/Setting/ArController.php | 170 + .../Setting/DataAktivitasController.php | 208 + app/Http/Controllers/Setting/EfController.php | 226 + .../Setting/EfSourceController.php | 139 + .../Controllers/Setting/GwpController.php | 57 + .../Setting/PeraturanController.php | 134 + .../Controllers/Setting/UnitController.php | 149 + .../Setting/UnitConversionController.php | 60 + .../Tool/CalculationController.php | 150 + .../Tool/CalculationController.php.bak | 148 + .../Tool/CopyActivityController.php | 117 + .../Tool/LockActivityController.php | 105 + .../Tool/ProdusenCalculateController.php | 116 + app/Http/Middleware/CheckEmailStatus.php | 22 + app/Http/Middleware/CheckPermissions.php | 23 + app/Imports/FormImport.php | 54 + app/Imports/FormKehutananImport.php | 46 + app/Models/ActivityApprovalKonsolidasi.php | 32 + app/Models/ActivityCopy.php | 18 + app/Models/ActivityCrf.php | 25 + app/Models/ActivityDataMitigation.php | 46 + app/Models/ActivityDataMitigationForm.php | 34 + app/Models/ActivityDataMitigationUnit.php | 20 + app/Models/ActivityForm.php | 24 + app/Models/ActivityFormDetail.php | 47 + app/Models/ActivityFormMetadata.php | 17 + app/Models/ActivityGpc.php | 13 + app/Models/ActivityGpcOutput.php | 65 + app/Models/ActivityLock.php | 23 + app/Models/ActivityProdusenCalculate.php | 18 + app/Models/Adaptation.php | 33 + app/Models/Agency.php | 27 + app/Models/AgencyActivity.php | 35 + app/Models/Agriculture3A.php | 21 + app/Models/Agriculture3A2b.php | 22 + app/Models/Agriculture3C1.php | 20 + app/Models/Agriculture3C3.php | 18 + app/Models/Agriculture3C4.php | 19 + app/Models/Agriculture3C5.php | 13 + app/Models/Agriculture3C6.php | 20 + app/Models/BaselineDataMitigation.php | 36 + app/Models/Calculation.php | 54 + app/Models/CmsFileDataAktivitas.php | 35 + app/Models/CmsFilePeraturan.php | 11 + app/Models/DataMitigation.php | 37 + app/Models/EmissionFactorMitigation.php | 37 + app/Models/EmissionFactorReference.php | 31 + app/Models/EmissionReductionMitigation.php | 35 + app/Models/Energy1A.php | 22 + app/Models/EnergyGpcI13.php | 19 + app/Models/EnergyGpcI41.php | 20 + app/Models/EnergyGpcI42.php | 19 + app/Models/EnergyGpcI51.php | 20 + app/Models/EnergyPLN.php | 19 + app/Models/Folu3B.php | 19 + app/Models/Ippu1A.php | 34 + app/Models/Kabupaten.php | 20 + app/Models/Kecamatan.php | 21 + app/Models/KegiatanAdaptasi.php | 41 + app/Models/KegiatanMitigasi.php | 69 + app/Models/Kelurahan.php | 22 + app/Models/LivestockManure.php | 13 + app/Models/LogFormDetail.php | 22 + app/Models/LogUserActivity.php | 22 + app/Models/Mitigation.php | 34 + app/Models/MitigationRendahKarbonDaerah.php | 21 + app/Models/Permission.php | 22 + app/Models/ReferenceActivity.php | 12 + app/Models/ReferenceAr.php | 11 + app/Models/ReferenceEf.php | 32 + app/Models/ReferenceEfSource.php | 11 + app/Models/ReferenceFactor.php | 22 + app/Models/ReferenceFactorSource.php | 11 + app/Models/ReferenceGhg.php | 11 + app/Models/ReferenceGpc.php | 17 + app/Models/ReferenceGwp.php | 21 + app/Models/ReferenceSector.php | 12 + app/Models/ReferenceSubSector.php | 17 + app/Models/ReferenceUnit.php | 11 + app/Models/ReferenceUnitConversion.php | 21 + app/Models/ReferenceWs.php | 43 + app/Models/SettingForm.php | 69 + app/Models/SettingFormDetail.php | 27 + app/Models/SigdModel.php | 57 + app/Models/SumberDataMitigasi.php | 26 + app/Models/User.php | 46 +- app/Models/UserGroup.php | 20 + app/Models/Waste4A.php | 14 + app/Models/Waste4AMethane.php | 20 + app/Models/Waste4APre.php | 14 + app/Models/Waste4B1.php | 19 + app/Models/Waste4B2.php | 18 + app/Models/Waste4C1.php | 13 + app/Models/Waste4C2a.php | 19 + app/Models/Waste4C2b.php | 13 + app/Models/Waste4C2c.php | 13 + app/Models/Waste4D1a.php | 13 + app/Models/Waste4D1c.php | 19 + app/Models/Waste4D1d.php | 14 + app/Models/Waste4D1e.php | 14 + app/{Models => ModelsOld}/AR.php | 0 app/{Models => ModelsOld}/EF.php | 0 .../FileDataAktivitas.php | 0 app/{Models => ModelsOld}/FilePengumuman.php | 0 app/{Models => ModelsOld}/GHG.php | 0 app/{Models => ModelsOld}/GWP.php | 0 app/{Models => ModelsOld}/Kategori.php | 0 app/{Models => ModelsOld}/Log.php | 0 app/ModelsOld/Master/AccessMenu.php | 14 + app/ModelsOld/Master/Activity.php | 15 + app/ModelsOld/Master/Agency.php | 12 + app/ModelsOld/Master/Group.php | 14 + app/ModelsOld/Master/Menu.php | 206 + app/ModelsOld/Master/Sektor.php | 15 + app/ModelsOld/Master/SubSektor.php | 19 + app/{Models => ModelsOld}/SumberDataEF.php | 0 app/{Models => ModelsOld}/Unit.php | 0 app/{Models => ModelsOld}/UnitKonversi.php | 0 app/ModelsOld/User.php | 58 + .../EmailVerificationNotification.php | 41 + app/Notifications/ResetPassword.php | 52 + app/Observers/ActivityCrfObserver.php | 33 + app/Observers/ActivityGpcObserver.php | 33 + app/Observers/ActivityGpcOutputObserver.php | 36 + app/Providers/AppServiceProvider.php | 24 +- app/Providers/RepositoryServiceProvider.php | 26 + app/Repositories/ActivityDataRepository.php | 10 + .../EloquentActivityDataRepository.php | 28 + .../EloquentEmissionFactorRepository.php | 15 + .../EloquentEmissionReductionRepository.php | 28 + app/Repositories/EmissionFactorRepository.php | 10 + .../EmissionReductionRepository.php | 11 + app/Rules/ExistInSchema.php | 2 +- app/Rules/UniqueInSchema.php | 2 +- .../Activity/FormKehutananService.php | 179 + app/Services/Activity/FormMetadataService.php | 65 + app/Services/Activity/FormMitigasiService.php | 889 + app/Services/Activity/FormService.php | 327 + .../Activity/LivestockManureService.php | 41 + app/Services/DashboardAdaptationService.php | 141 + app/Services/DashboardMitigationService.php | 165 + app/Services/DashboardService.php | 103 + app/Services/DashboardService.php.bak | 101 + app/Services/Emisi/Agriculture3A2bService.php | 187 + app/Services/Emisi/Agriculture3AService.php | 164 + app/Services/Emisi/Agriculture3C1Service.php | 136 + app/Services/Emisi/Agriculture3C3Service.php | 115 + app/Services/Emisi/Agriculture3C4Service.php | 268 + app/Services/Emisi/Agriculture3C5Service.php | 188 + app/Services/Emisi/Agriculture3C6Service.php | 199 + app/Services/Emisi/Energy1AService.php | 134 + app/Services/Emisi/EnergyGPCService.php | 333 + app/Services/Emisi/Folu3BService.php | 182 + app/Services/Emisi/GpcMappingService.php | 233 + app/Services/Emisi/Ippu1AService.php | 191 + app/Services/Emisi/Waste4AMethaneService.php | 138 + app/Services/Emisi/Waste4APreService.php | 107 + app/Services/Emisi/Waste4AService.php | 130 + app/Services/Emisi/Waste4B1Service.php | 144 + app/Services/Emisi/Waste4B2Service.php | 140 + app/Services/Emisi/Waste4C1Service.php | 86 + app/Services/Emisi/Waste4C2aService.php | 150 + app/Services/Emisi/Waste4C2bService.php | 115 + app/Services/Emisi/Waste4C2cService.php | 118 + app/Services/Emisi/Waste4D1aService.php | 83 + app/Services/Emisi/Waste4D1cService.php | 140 + app/Services/Emisi/Waste4D1dService.php | 94 + app/Services/Emisi/Waste4D1eService.php | 117 + app/Services/Reports/CrfService.php | 26 + app/Services/Reports/GcomCrfService.php | 14 + app/Services/Reports/GpcOutputService.php | 14 + app/Services/Reports/WorksheetService.php | 57 + app/Services/Setting/ArService.php | 40 + app/Services/Setting/DataAktivitasService.php | 72 + app/Services/Setting/EfService.php | 47 + app/Services/Setting/EfSourceService.php | 16 + app/Services/Setting/GwpService.php | 87 + app/Services/Setting/PeraturanService.php | 56 + .../Setting/UnitConversionService.php | 72 + app/Services/Setting/UnitService.php | 19 + app/Services/SigdCrudService.php | 237 + app/Services/Tool/CalculationService.php | 20 + app/Services/Tool/CopyActivityService.php | 149 + app/Services/Tool/LockActivityService.php | 139 + .../Tool/ProdusenCalculateService.php | 102 + app/Services/User/AgencyService.php | 43 + app/Services/User/UserGroupService.php | 89 + app/Services/User/UserService.php | 89 + app/View/Components/ActivityYearSelect.php | 24 + app/View/Components/InventoryYearSelect.php | 24 + app/helpers.php | 97 + composer.json | 8 +- composer.lock | 2356 ++- .../Buttons-1.5.4/css/buttons.bootstrap.css | 167 + .../css/buttons.bootstrap.min.css | 1 + .../Buttons-1.5.4/css/buttons.bootstrap4.css | 231 + .../css/buttons.bootstrap4.min.css | 1 + .../Buttons-1.5.4/css/buttons.dataTables.css | 365 + .../css/buttons.dataTables.min.css | 1 + .../Buttons-1.5.4/css/buttons.foundation.css | 200 + .../css/buttons.foundation.min.css | 1 + .../Buttons-1.5.4/css/buttons.jqueryui.css | 226 + .../css/buttons.jqueryui.min.css | 1 + .../Buttons-1.5.4/css/buttons.semanticui.css | 180 + .../css/buttons.semanticui.min.css | 1 + .../DataTables/Buttons-1.5.4/css/common.scss | 33 + .../DataTables/Buttons-1.5.4/css/mixins.scss | 141 + .../Buttons-1.5.4/js/buttons.bootstrap.js | 70 + .../Buttons-1.5.4/js/buttons.bootstrap.min.js | 6 + .../Buttons-1.5.4/js/buttons.bootstrap4.js | 63 + .../js/buttons.bootstrap4.min.js | 6 + .../Buttons-1.5.4/js/buttons.colVis.js | 213 + .../Buttons-1.5.4/js/buttons.colVis.min.js | 10 + .../Buttons-1.5.4/js/buttons.flash.js | 1456 ++ .../Buttons-1.5.4/js/buttons.flash.min.js | 39 + .../Buttons-1.5.4/js/buttons.foundation.js | 88 + .../js/buttons.foundation.min.js | 6 + .../Buttons-1.5.4/js/buttons.html5.js | 1459 ++ .../Buttons-1.5.4/js/buttons.html5.min.js | 35 + .../Buttons-1.5.4/js/buttons.jqueryui.js | 62 + .../Buttons-1.5.4/js/buttons.jqueryui.min.js | 6 + .../Buttons-1.5.4/js/buttons.print.js | 210 + .../Buttons-1.5.4/js/buttons.print.min.js | 9 + .../Buttons-1.5.4/js/buttons.semanticui.js | 57 + .../js/buttons.semanticui.min.js | 6 + .../Buttons-1.5.4/js/dataTables.buttons.js | 1916 ++ .../js/dataTables.buttons.min.js | 44 + .../Buttons-1.5.4/swf/flashExport.swf | Bin 0 -> 64603 bytes .../css/dataTables.bootstrap.css | 187 + .../css/dataTables.bootstrap.min.css | 1 + .../css/dataTables.bootstrap4.css | 206 + .../css/dataTables.bootstrap4.min.css | 1 + .../css/dataTables.foundation.css | 118 + .../css/dataTables.foundation.min.css | 1 + .../css/dataTables.jqueryui.css | 481 + .../css/dataTables.jqueryui.min.css | 1 + .../css/dataTables.semanticui.css | 102 + .../css/dataTables.semanticui.min.css | 1 + .../css/jquery.dataTables.css | 448 + .../css/jquery.dataTables.min.css | 1 + .../DataTables-1.10.18/images/sort_asc.png | Bin 0 -> 160 bytes .../images/sort_asc_disabled.png | Bin 0 -> 148 bytes .../DataTables-1.10.18/images/sort_both.png | Bin 0 -> 201 bytes .../DataTables-1.10.18/images/sort_desc.png | Bin 0 -> 158 bytes .../images/sort_desc_disabled.png | Bin 0 -> 146 bytes .../js/dataTables.bootstrap.js | 182 + .../js/dataTables.bootstrap.min.js | 8 + .../js/dataTables.bootstrap4.js | 184 + .../js/dataTables.bootstrap4.min.js | 8 + .../js/dataTables.foundation.js | 174 + .../js/dataTables.foundation.min.js | 8 + .../js/dataTables.jqueryui.js | 164 + .../js/dataTables.jqueryui.min.js | 9 + .../js/dataTables.semanticui.js | 212 + .../js/dataTables.semanticui.min.js | 9 + .../js/jquery.dataTables.js | 15296 ++++++++++++++++ .../js/jquery.dataTables.min.js | 166 + .../css/fixedColumns.bootstrap.css | 48 + .../css/fixedColumns.bootstrap.min.css | 1 + .../css/fixedColumns.bootstrap4.css | 52 + .../css/fixedColumns.bootstrap4.min.css | 1 + .../css/fixedColumns.dataTables.css | 18 + .../css/fixedColumns.dataTables.min.css | 1 + .../css/fixedColumns.foundation.css | 31 + .../css/fixedColumns.foundation.min.css | 1 + .../css/fixedColumns.jqueryui.css | 12 + .../css/fixedColumns.jqueryui.min.css | 1 + .../css/fixedColumns.semanticui.css | 40 + .../css/fixedColumns.semanticui.min.css | 1 + .../js/dataTables.fixedColumns.js | 1632 ++ .../js/dataTables.fixedColumns.min.js | 35 + .../js/fixedColumns.bootstrap.js | 38 + .../js/fixedColumns.bootstrap.min.js | 5 + .../js/fixedColumns.bootstrap4.js | 38 + .../js/fixedColumns.bootstrap4.min.js | 5 + .../js/fixedColumns.dataTables.js | 38 + .../js/fixedColumns.foundation.js | 38 + .../js/fixedColumns.foundation.min.js | 5 + .../js/fixedColumns.jqueryui.js | 38 + .../js/fixedColumns.jqueryui.min.js | 5 + .../js/fixedColumns.semanicui.js | 38 + .../js/fixedColumns.semanticui.js | 38 + .../js/fixedColumns.semanticui.min.js | 5 + .../css/fixedHeader.bootstrap.css | 20 + .../css/fixedHeader.bootstrap.min.css | 1 + .../css/fixedHeader.bootstrap4.css | 20 + .../css/fixedHeader.bootstrap4.min.css | 1 + .../css/fixedHeader.dataTables.css | 19 + .../css/fixedHeader.dataTables.min.css | 1 + .../css/fixedHeader.foundation.css | 20 + .../css/fixedHeader.foundation.min.css | 1 + .../css/fixedHeader.jqueryui.css | 15 + .../css/fixedHeader.jqueryui.min.css | 1 + .../css/fixedHeader.semanticui.css | 14 + .../css/fixedHeader.semanticui.min.css | 1 + .../js/dataTables.fixedHeader.js | 692 + .../js/dataTables.fixedHeader.min.js | 18 + .../js/fixedHeader.bootstrap.js | 38 + .../js/fixedHeader.bootstrap.min.js | 5 + .../js/fixedHeader.bootstrap4.js | 38 + .../js/fixedHeader.bootstrap4.min.js | 5 + .../js/fixedHeader.dataTables.js | 38 + .../js/fixedHeader.foundation.js | 38 + .../js/fixedHeader.foundation.min.js | 5 + .../js/fixedHeader.jqueryui.js | 38 + .../js/fixedHeader.jqueryui.min.js | 5 + .../js/fixedHeader.semanicui.js | 38 + .../js/fixedHeader.semanticui.js | 38 + .../js/fixedHeader.semanticui.min.js | 5 + .../KeyTable-2.5.0/css/keyTable.bootstrap.css | 9 + .../css/keyTable.bootstrap.min.css | 1 + .../css/keyTable.bootstrap4.css | 9 + .../css/keyTable.bootstrap4.min.css | 1 + .../css/keyTable.dataTables.css | 9 + .../css/keyTable.dataTables.min.css | 1 + .../css/keyTable.foundation.css | 9 + .../css/keyTable.foundation.min.css | 1 + .../KeyTable-2.5.0/css/keyTable.jqueryui.css | 9 + .../css/keyTable.jqueryui.min.css | 1 + .../css/keyTable.semanticui.css | 9 + .../css/keyTable.semanticui.min.css | 1 + .../KeyTable-2.5.0/js/dataTables.keyTable.js | 1163 ++ .../js/dataTables.keyTable.min.js | 40 + .../KeyTable-2.5.0/js/keyTable.bootstrap.js | 38 + .../js/keyTable.bootstrap.min.js | 5 + .../KeyTable-2.5.0/js/keyTable.bootstrap4.js | 38 + .../js/keyTable.bootstrap4.min.js | 5 + .../KeyTable-2.5.0/js/keyTable.dataTables.js | 38 + .../KeyTable-2.5.0/js/keyTable.foundation.js | 38 + .../js/keyTable.foundation.min.js | 5 + .../KeyTable-2.5.0/js/keyTable.jqueryui.js | 38 + .../js/keyTable.jqueryui.min.js | 5 + .../KeyTable-2.5.0/js/keyTable.semanicui.js | 0 .../KeyTable-2.5.0/js/keyTable.semanticui.js | 38 + .../js/keyTable.semanticui.min.js | 5 + .../css/responsive.bootstrap.css | 180 + .../css/responsive.bootstrap.min.css | 1 + .../css/responsive.bootstrap4.css | 180 + .../css/responsive.bootstrap4.min.css | 1 + .../css/responsive.dataTables.css | 177 + .../css/responsive.dataTables.min.css | 1 + .../css/responsive.foundation.css | 180 + .../css/responsive.foundation.min.css | 1 + .../css/responsive.jqueryui.css | 177 + .../css/responsive.jqueryui.min.css | 1 + .../css/responsive.semanticui.css | 180 + .../css/responsive.semanticui.min.css | 1 + .../js/dataTables.responsive.js | 1393 ++ .../js/dataTables.responsive.min.js | 30 + .../js/responsive.bootstrap.js | 85 + .../js/responsive.bootstrap.min.js | 6 + .../js/responsive.bootstrap4.js | 85 + .../js/responsive.bootstrap4.min.js | 6 + .../js/responsive.foundation.js | 62 + .../js/responsive.foundation.min.js | 6 + .../js/responsive.jqueryui.js | 63 + .../js/responsive.jqueryui.min.js | 6 + .../js/responsive.semanticui.js | 77 + .../js/responsive.semanticui.min.js | 6 + .../plugins/DataTables/datatables.custom.css | 52 + .../plugins/DataTables/datatables.min.css | 30 + .../plugins/DataTables/datatables.min.js | 410 + resources/views/layouts/master.blade.php | 21 +- .../components/activity-year-select.blade.php | 38 + .../adaptation-year-select.blade.php | 26 + .../inventory-year-select.blade.php | 12 + .../mitigation-year-select.blade.php | 26 + .../components/sumber-data-card.blade.php | 55 + .../dashboard/adaptasi/index.blade.php | 6 - .../dashboard/inventory/index.blade.php | 7 - .../dashboard/mitigasi/index.blade.php | 8 - resources/views/modules/form/action.blade.php | 71 + .../modules/form/aktivitas-user.blade.php | 31 + .../views/modules/form/approve.blade.php | 8 + resources/views/modules/form/copy.blade.php | 42 + resources/views/modules/form/import.blade.php | 30 + .../form/index-adaptasi-edit.blade.php | 580 + .../modules/form/index-adaptasi-pdf.blade.php | 93 + .../form/index-adaptasi-thankyou.blade.php | 59 + .../form/index-adaptasi-view.blade.php | 90 + .../modules/form/index-adaptasi.blade.php | 661 + .../modules/form/index-kehutanan.blade.php | 424 + .../form/index-mitigasi-edit.blade.php | 2286 +++ .../modules/form/index-mitigasi-pdf.blade.php | 93 + .../form/index-mitigasi-thankyou.blade.php | 74 + .../form/index-mitigasi-view.blade.php | 299 + .../modules/form/index-mitigasi.blade.php | 2188 +++ resources/views/modules/form/index.blade.php | 62 + .../form/livestock-manure/create.blade.php | 81 + .../form/livestock-manure/edit.blade.php | 108 + .../form/livestock-manure/index.blade.php | 138 + resources/views/modules/form/lock.blade.php | 23 + .../modules/form/metadata/index.blade.php | 172 + .../modules/form/metadata/list.blade.php | 25 + .../views/modules/form/scripts.blade.php | 300 + resources/views/modules/form/table.blade.php | 77 + .../views/modules/reports/crf/index.blade.php | 107 + .../modules/reports/crf/report.blade.php | 9 + .../views/modules/reports/crf/row.blade.php | 28 + .../views/modules/reports/crf/table.blade.php | 36 + .../reports/gcom-crf/index-backup.blade.php | 695 + .../modules/reports/gcom-crf/index.blade.php | 92 + .../modules/reports/gcom-crf/note.blade.php | 76 + .../modules/reports/gcom-crf/report.blade.php | 9 + .../modules/reports/gcom-crf/table.blade.php | 208 + .../reports/gpc-output/index.blade.php | 84 + .../reports/gpc-output/report.blade.php | 9 + .../reports/gpc-output/table.blade.php | 68 + .../modules/reports/worksheet/index.blade.php | 167 + .../reports/worksheet/report.blade.php | 11 + .../reports/worksheet/tables/1A1a.blade.php | 79 + .../reports/worksheet/tables/1A1b.blade.php | 1 + .../reports/worksheet/tables/1A1c.blade.php | 1 + .../reports/worksheet/tables/1A2.blade.php | 1 + .../reports/worksheet/tables/1A3.blade.php | 1 + .../reports/worksheet/tables/1A4a.blade.php | 1 + .../reports/worksheet/tables/1A4b.blade.php | 1 + .../reports/worksheet/tables/1A5.blade.php | 1 + .../reports/worksheet/tables/3A1.blade.php | 50 + .../reports/worksheet/tables/3A2a.blade.php | 44 + .../reports/worksheet/tables/3A2b.blade.php | 77 + .../reports/worksheet/tables/3B1a.blade.php | 48 + .../reports/worksheet/tables/3B1b.blade.php | 1 + .../reports/worksheet/tables/3B2a.blade.php | 1 + .../reports/worksheet/tables/3B2b.blade.php | 1 + .../reports/worksheet/tables/3B3a.blade.php | 1 + .../reports/worksheet/tables/3B3b.blade.php | 1 + .../reports/worksheet/tables/3B4a.blade.php | 1 + .../reports/worksheet/tables/3B4b.blade.php | 1 + .../reports/worksheet/tables/3B5a.blade.php | 1 + .../reports/worksheet/tables/3B5b.blade.php | 1 + .../reports/worksheet/tables/3B6a.blade.php | 1 + .../reports/worksheet/tables/3B6b.blade.php | 1 + .../reports/worksheet/tables/3C1a.blade.php | 96 + .../reports/worksheet/tables/3C1b.blade.php | 1 + .../reports/worksheet/tables/3C3.blade.php | 49 + .../reports/worksheet/tables/3C4.blade.php | 110 + .../reports/worksheet/tables/3C5.blade.php | 74 + .../reports/worksheet/tables/3C6.blade.php | 63 + .../reports/worksheet/tables/4A-a.blade.php | 58 + .../reports/worksheet/tables/4A-b.blade.php | 42 + .../reports/worksheet/tables/4A-c.blade.php | 40 + .../reports/worksheet/tables/4A-d.blade.php | 40 + .../reports/worksheet/tables/4A-e.blade.php | 75 + .../reports/worksheet/tables/4A-f.blade.php | 1 + .../reports/worksheet/tables/4A-g.blade.php | 1 + .../reports/worksheet/tables/4A-h.blade.php | 1 + .../reports/worksheet/tables/4A-i.blade.php | 1 + .../reports/worksheet/tables/4A-j.blade.php | 1 + .../reports/worksheet/tables/4A-k.blade.php | 46 + .../reports/worksheet/tables/4B1.blade.php | 54 + .../reports/worksheet/tables/4B2.blade.php | 46 + .../reports/worksheet/tables/4C1.blade.php | 50 + .../reports/worksheet/tables/4C2a.blade.php | 42 + .../reports/worksheet/tables/4C2b.blade.php | 31 + .../reports/worksheet/tables/4C2c.blade.php | 36 + .../reports/worksheet/tables/4D1a.blade.php | 51 + .../reports/worksheet/tables/4D1b.blade.php | 126 + .../reports/worksheet/tables/4D1c.blade.php | 66 + .../reports/worksheet/tables/4D1d.blade.php | 60 + .../reports/worksheet/tables/4D1e.blade.php | 47 + .../views/modules/setting/ar/create.blade.php | 67 + .../views/modules/setting/ar/edit.blade.php | 94 + .../views/modules/setting/ar/index.blade.php | 91 + .../setting/ef-source/create.blade.php | 69 + .../modules/setting/ef-source/edit.blade.php | 78 + .../modules/setting/ef-source/index.blade.php | 70 + .../views/modules/setting/ef/create.blade.php | 149 + .../views/modules/setting/ef/edit.blade.php | 170 + .../views/modules/setting/ef/index.blade.php | 114 + .../views/modules/setting/ef/modal.blade.php | 100 + .../file-data-aktivitas/create.blade.php | 168 + .../file-data-aktivitas/edit.blade.php | 197 + .../file-data-aktivitas/index.blade.php | 177 + .../setting/file-peraturan/create.blade.php | 62 + .../setting/file-peraturan/edit.blade.php | 69 + .../setting/file-peraturan/index.blade.php | 72 + .../views/modules/setting/gwp/index.blade.php | 64 + .../setting/unit-conversion/index.blade.php | 87 + .../modules/setting/unit/create.blade.php | 94 + .../views/modules/setting/unit/edit.blade.php | 96 + .../modules/setting/unit/index.blade.php | 82 + .../modules/tool/calculation/create.blade.php | 92 + .../tool/calculation/create.blade.php.bak | 87 + .../modules/tool/calculation/index.blade.php | 143 + .../views/modules/tool/copy/index.blade.php | 173 + .../views/modules/tool/lock/index.blade.php | 188 + .../tool/produsen-calculate/index.blade.php | 178 + routes/modules/modules.php | 1078 +- routes/web.php | 34 +- 605 files changed, 67749 insertions(+), 7051 deletions(-) create mode 100644 app/Console/Commands/CopyActivityQueue.php create mode 100644 app/Console/Commands/EmisiCalculationQueue.php create mode 100644 app/Console/Commands/EmisiCalculationQueue.php.bak create mode 100644 app/Console/Commands/ProdusenCalculateQueue.php create mode 100644 app/Enums/ActivityType.php create mode 100644 app/Enums/FruitVegetableCategory.php create mode 100644 app/Enums/GcomCrfData.php create mode 100644 app/Enums/LandCategory.php create mode 100644 app/Enums/LandType.php create mode 100644 app/Enums/LingkupAksesData.php create mode 100644 app/Enums/Sector.php create mode 100644 app/Enums/SigdStatus.php create mode 100644 app/Enums/TransportationCategory.php create mode 100644 app/Enums/WsCategory.php create mode 100644 app/Exports/CrfExport.php create mode 100644 app/Exports/FormExport.php create mode 100644 app/Exports/FormKehutananExport.php create mode 100644 app/Exports/GcomCrfExport.php create mode 100644 app/Exports/GpcOutputExport.php create mode 100644 app/Exports/WorksheetExport.php create mode 100644 app/Helpers/FormulaEvaluator.php create mode 100644 app/Helpers/FormulaHelper.php create mode 100644 app/Http/Controllers/Activity/FormAdaptasiController.php create mode 100644 app/Http/Controllers/Activity/FormController.php create mode 100644 app/Http/Controllers/Activity/FormKehutananController.php create mode 100644 app/Http/Controllers/Activity/FormMetadataController.php create mode 100644 app/Http/Controllers/Activity/FormMitigasiController.php create mode 100644 app/Http/Controllers/Activity/LivestockManureController.php create mode 100644 app/Http/Controllers/Emisi/Agriculture3A2bController.php create mode 100644 app/Http/Controllers/Emisi/Agriculture3AController.php create mode 100644 app/Http/Controllers/Emisi/Agriculture3C1Controller.php create mode 100644 app/Http/Controllers/Emisi/Agriculture3C3Controller.php create mode 100644 app/Http/Controllers/Emisi/Agriculture3C4Controller.php create mode 100644 app/Http/Controllers/Emisi/Agriculture3C5Controller.php create mode 100644 app/Http/Controllers/Emisi/Agriculture3C6Controller.php create mode 100644 app/Http/Controllers/Emisi/Energy1AController.php create mode 100644 app/Http/Controllers/Emisi/EnergyGPCController.php create mode 100644 app/Http/Controllers/Emisi/Folu3BController.php create mode 100644 app/Http/Controllers/Emisi/GpcMappingController.php create mode 100644 app/Http/Controllers/Emisi/Waste4AController.php create mode 100644 app/Http/Controllers/Emisi/Waste4AMethaneController.php create mode 100644 app/Http/Controllers/Emisi/Waste4APreController.php create mode 100644 app/Http/Controllers/Emisi/Waste4B1Controller.php create mode 100644 app/Http/Controllers/Emisi/Waste4B2Controller.php create mode 100644 app/Http/Controllers/Emisi/Waste4C1Controller.php create mode 100644 app/Http/Controllers/Emisi/Waste4C2aController.php create mode 100644 app/Http/Controllers/Emisi/Waste4C2bController.php create mode 100644 app/Http/Controllers/Emisi/Waste4C2cController.php create mode 100644 app/Http/Controllers/Emisi/Waste4D1aController.php create mode 100644 app/Http/Controllers/Emisi/Waste4D1cController.php create mode 100644 app/Http/Controllers/Emisi/Waste4D1dController.php create mode 100644 app/Http/Controllers/Emisi/Waste4D1eController.php delete mode 100644 app/Http/Controllers/Energi/BahanBakarListrikController.php delete mode 100644 app/Http/Controllers/Energi/EmisiBatuBaraController.php delete mode 100644 app/Http/Controllers/Energi/EmisiMigasController.php delete mode 100644 app/Http/Controllers/Energi/EnergiLainnyaController.php delete mode 100644 app/Http/Controllers/Energi/IndustriManufakturController.php delete mode 100644 app/Http/Controllers/Energi/KomersialController.php delete mode 100644 app/Http/Controllers/Energi/ListrikPlnController.php delete mode 100644 app/Http/Controllers/Energi/PembangkitListrikController.php delete mode 100644 app/Http/Controllers/Energi/PenggunaanListrikController.php delete mode 100644 app/Http/Controllers/Energi/PenyulinganController.php delete mode 100644 app/Http/Controllers/Energi/RumahTanggaController.php delete mode 100644 app/Http/Controllers/Energi/TransmisiDistribusiController.php delete mode 100644 app/Http/Controllers/Energi/TransportasiController.php delete mode 100644 app/Http/Controllers/IPPU/KarbonatKacaController.php delete mode 100644 app/Http/Controllers/IPPU/KarbonatKeramikController.php delete mode 100644 app/Http/Controllers/IPPU/KarbonatLainnyaController.php delete mode 100644 app/Http/Controllers/IPPU/KarbonatMakananController.php delete mode 100644 app/Http/Controllers/IPPU/KarbonatPulpController.php delete mode 100644 app/Http/Controllers/IPPU/PelumasParafinController.php delete mode 100644 app/Http/Controllers/IPPU/PenggunaAcController.php delete mode 100644 app/Http/Controllers/IPPU/ProduksiController.php delete mode 100644 app/Http/Controllers/Kalkulasi/CRFController.php delete mode 100644 app/Http/Controllers/Kalkulasi/GCOMController.php delete mode 100644 app/Http/Controllers/Kalkulasi/GPCController.php delete mode 100644 app/Http/Controllers/Kalkulasi/HitungProdusenController.php delete mode 100644 app/Http/Controllers/Kalkulasi/KalkulasiEmisiController.php delete mode 100644 app/Http/Controllers/Kalkulasi/KunciAktifitasController.php delete mode 100644 app/Http/Controllers/Kalkulasi/SalinAktifitasController.php delete mode 100644 app/Http/Controllers/Kalkulasi/WorksheetController.php delete mode 100644 app/Http/Controllers/Limbah/DistribusiSampahDomestikController.php delete mode 100644 app/Http/Controllers/Limbah/KependudukanController.php delete mode 100644 app/Http/Controllers/Limbah/KomposisiSampahDomestikController.php delete mode 100644 app/Http/Controllers/Limbah/LimbahCairIndustriController.php delete mode 100644 app/Http/Controllers/Limbah/SaranaAirLimbahDomestikController.php delete mode 100644 app/Http/Controllers/Limbah/TimbulanSampahController.php delete mode 100644 app/Http/Controllers/Master/AgencyController.php delete mode 100644 app/Http/Controllers/Pengaturan/ARController.php delete mode 100644 app/Http/Controllers/Pengaturan/EFController.php delete mode 100644 app/Http/Controllers/Pengaturan/GHGController.php delete mode 100644 app/Http/Controllers/Pengaturan/GWPController.php delete mode 100644 app/Http/Controllers/Pengaturan/KategoriController.php delete mode 100644 app/Http/Controllers/Pengaturan/PengumumanController.php delete mode 100644 app/Http/Controllers/Pengaturan/SumberDataEFController.php delete mode 100644 app/Http/Controllers/Pengaturan/UnitController.php delete mode 100644 app/Http/Controllers/Pengaturan/UnitKonversiController.php delete mode 100644 app/Http/Controllers/Pengaturan/UploadAktifitasController.php delete mode 100644 app/Http/Controllers/Pertanian/HortikulturaController.php delete mode 100644 app/Http/Controllers/Pertanian/KehilanganKayuController.php delete mode 100644 app/Http/Controllers/Pertanian/KonsumsiPupukController.php delete mode 100644 app/Http/Controllers/Pertanian/KotoranTernakController.php delete mode 100644 app/Http/Controllers/Pertanian/LahanPemukimanController.php delete mode 100644 app/Http/Controllers/Pertanian/PengairanSawahController.php delete mode 100644 app/Http/Controllers/Pertanian/PopulasiTernakController.php delete mode 100644 app/Http/Controllers/Pertanian/SawahController.php delete mode 100644 app/Http/Controllers/Pertanian/SistemAirController.php delete mode 100644 app/Http/Controllers/Pertanian/TanamanPanganController.php delete mode 100644 app/Http/Controllers/Pertanian/TransisiController.php create mode 100644 app/Http/Controllers/Reports/CrfController.php create mode 100644 app/Http/Controllers/Reports/GcomCrfController.php create mode 100644 app/Http/Controllers/Reports/GpcOutputController.php create mode 100644 app/Http/Controllers/Reports/WorksheetController.php create mode 100644 app/Http/Controllers/Setting/ArController.php create mode 100644 app/Http/Controllers/Setting/DataAktivitasController.php create mode 100644 app/Http/Controllers/Setting/EfController.php create mode 100644 app/Http/Controllers/Setting/EfSourceController.php create mode 100644 app/Http/Controllers/Setting/GwpController.php create mode 100644 app/Http/Controllers/Setting/PeraturanController.php create mode 100644 app/Http/Controllers/Setting/UnitController.php create mode 100644 app/Http/Controllers/Setting/UnitConversionController.php create mode 100644 app/Http/Controllers/Tool/CalculationController.php create mode 100644 app/Http/Controllers/Tool/CalculationController.php.bak create mode 100644 app/Http/Controllers/Tool/CopyActivityController.php create mode 100644 app/Http/Controllers/Tool/LockActivityController.php create mode 100644 app/Http/Controllers/Tool/ProdusenCalculateController.php create mode 100644 app/Http/Middleware/CheckEmailStatus.php create mode 100644 app/Http/Middleware/CheckPermissions.php create mode 100644 app/Imports/FormImport.php create mode 100644 app/Imports/FormKehutananImport.php create mode 100644 app/Models/ActivityApprovalKonsolidasi.php create mode 100644 app/Models/ActivityCopy.php create mode 100644 app/Models/ActivityCrf.php create mode 100644 app/Models/ActivityDataMitigation.php create mode 100644 app/Models/ActivityDataMitigationForm.php create mode 100644 app/Models/ActivityDataMitigationUnit.php create mode 100644 app/Models/ActivityForm.php create mode 100644 app/Models/ActivityFormDetail.php create mode 100644 app/Models/ActivityFormMetadata.php create mode 100644 app/Models/ActivityGpc.php create mode 100644 app/Models/ActivityGpcOutput.php create mode 100644 app/Models/ActivityLock.php create mode 100644 app/Models/ActivityProdusenCalculate.php create mode 100644 app/Models/Adaptation.php create mode 100644 app/Models/Agency.php create mode 100644 app/Models/AgencyActivity.php create mode 100644 app/Models/Agriculture3A.php create mode 100644 app/Models/Agriculture3A2b.php create mode 100644 app/Models/Agriculture3C1.php create mode 100644 app/Models/Agriculture3C3.php create mode 100644 app/Models/Agriculture3C4.php create mode 100644 app/Models/Agriculture3C5.php create mode 100644 app/Models/Agriculture3C6.php create mode 100644 app/Models/BaselineDataMitigation.php create mode 100644 app/Models/Calculation.php create mode 100644 app/Models/CmsFileDataAktivitas.php create mode 100644 app/Models/CmsFilePeraturan.php create mode 100644 app/Models/DataMitigation.php create mode 100644 app/Models/EmissionFactorMitigation.php create mode 100644 app/Models/EmissionFactorReference.php create mode 100644 app/Models/EmissionReductionMitigation.php create mode 100644 app/Models/Energy1A.php create mode 100644 app/Models/EnergyGpcI13.php create mode 100644 app/Models/EnergyGpcI41.php create mode 100644 app/Models/EnergyGpcI42.php create mode 100644 app/Models/EnergyGpcI51.php create mode 100644 app/Models/EnergyPLN.php create mode 100644 app/Models/Folu3B.php create mode 100644 app/Models/Ippu1A.php create mode 100644 app/Models/Kabupaten.php create mode 100644 app/Models/Kecamatan.php create mode 100644 app/Models/KegiatanAdaptasi.php create mode 100644 app/Models/KegiatanMitigasi.php create mode 100644 app/Models/Kelurahan.php create mode 100644 app/Models/LivestockManure.php create mode 100644 app/Models/LogFormDetail.php create mode 100644 app/Models/LogUserActivity.php create mode 100644 app/Models/Mitigation.php create mode 100644 app/Models/MitigationRendahKarbonDaerah.php create mode 100644 app/Models/Permission.php create mode 100644 app/Models/ReferenceActivity.php create mode 100644 app/Models/ReferenceAr.php create mode 100644 app/Models/ReferenceEf.php create mode 100644 app/Models/ReferenceEfSource.php create mode 100644 app/Models/ReferenceFactor.php create mode 100644 app/Models/ReferenceFactorSource.php create mode 100644 app/Models/ReferenceGhg.php create mode 100644 app/Models/ReferenceGpc.php create mode 100644 app/Models/ReferenceGwp.php create mode 100644 app/Models/ReferenceSector.php create mode 100644 app/Models/ReferenceSubSector.php create mode 100644 app/Models/ReferenceUnit.php create mode 100644 app/Models/ReferenceUnitConversion.php create mode 100644 app/Models/ReferenceWs.php create mode 100644 app/Models/SettingForm.php create mode 100644 app/Models/SettingFormDetail.php create mode 100644 app/Models/SigdModel.php create mode 100644 app/Models/SumberDataMitigasi.php create mode 100644 app/Models/UserGroup.php create mode 100644 app/Models/Waste4A.php create mode 100644 app/Models/Waste4AMethane.php create mode 100644 app/Models/Waste4APre.php create mode 100644 app/Models/Waste4B1.php create mode 100644 app/Models/Waste4B2.php create mode 100644 app/Models/Waste4C1.php create mode 100644 app/Models/Waste4C2a.php create mode 100644 app/Models/Waste4C2b.php create mode 100644 app/Models/Waste4C2c.php create mode 100644 app/Models/Waste4D1a.php create mode 100644 app/Models/Waste4D1c.php create mode 100644 app/Models/Waste4D1d.php create mode 100644 app/Models/Waste4D1e.php rename app/{Models => ModelsOld}/AR.php (100%) rename app/{Models => ModelsOld}/EF.php (100%) rename app/{Models => ModelsOld}/FileDataAktivitas.php (100%) rename app/{Models => ModelsOld}/FilePengumuman.php (100%) rename app/{Models => ModelsOld}/GHG.php (100%) rename app/{Models => ModelsOld}/GWP.php (100%) rename app/{Models => ModelsOld}/Kategori.php (100%) rename app/{Models => ModelsOld}/Log.php (100%) create mode 100644 app/ModelsOld/Master/AccessMenu.php create mode 100644 app/ModelsOld/Master/Activity.php create mode 100644 app/ModelsOld/Master/Agency.php create mode 100644 app/ModelsOld/Master/Group.php create mode 100644 app/ModelsOld/Master/Menu.php create mode 100644 app/ModelsOld/Master/Sektor.php create mode 100644 app/ModelsOld/Master/SubSektor.php rename app/{Models => ModelsOld}/SumberDataEF.php (100%) rename app/{Models => ModelsOld}/Unit.php (100%) rename app/{Models => ModelsOld}/UnitKonversi.php (100%) create mode 100644 app/ModelsOld/User.php create mode 100644 app/Notifications/EmailVerificationNotification.php create mode 100644 app/Notifications/ResetPassword.php create mode 100644 app/Observers/ActivityCrfObserver.php create mode 100644 app/Observers/ActivityGpcObserver.php create mode 100644 app/Observers/ActivityGpcOutputObserver.php create mode 100644 app/Providers/RepositoryServiceProvider.php create mode 100644 app/Repositories/ActivityDataRepository.php create mode 100644 app/Repositories/EloquentActivityDataRepository.php create mode 100644 app/Repositories/EloquentEmissionFactorRepository.php create mode 100644 app/Repositories/EloquentEmissionReductionRepository.php create mode 100644 app/Repositories/EmissionFactorRepository.php create mode 100644 app/Repositories/EmissionReductionRepository.php create mode 100644 app/Services/Activity/FormKehutananService.php create mode 100644 app/Services/Activity/FormMetadataService.php create mode 100644 app/Services/Activity/FormMitigasiService.php create mode 100644 app/Services/Activity/FormService.php create mode 100644 app/Services/Activity/LivestockManureService.php create mode 100644 app/Services/DashboardAdaptationService.php create mode 100644 app/Services/DashboardMitigationService.php create mode 100644 app/Services/DashboardService.php create mode 100644 app/Services/DashboardService.php.bak create mode 100644 app/Services/Emisi/Agriculture3A2bService.php create mode 100644 app/Services/Emisi/Agriculture3AService.php create mode 100644 app/Services/Emisi/Agriculture3C1Service.php create mode 100644 app/Services/Emisi/Agriculture3C3Service.php create mode 100644 app/Services/Emisi/Agriculture3C4Service.php create mode 100644 app/Services/Emisi/Agriculture3C5Service.php create mode 100644 app/Services/Emisi/Agriculture3C6Service.php create mode 100644 app/Services/Emisi/Energy1AService.php create mode 100644 app/Services/Emisi/EnergyGPCService.php create mode 100644 app/Services/Emisi/Folu3BService.php create mode 100644 app/Services/Emisi/GpcMappingService.php create mode 100644 app/Services/Emisi/Ippu1AService.php create mode 100644 app/Services/Emisi/Waste4AMethaneService.php create mode 100644 app/Services/Emisi/Waste4APreService.php create mode 100644 app/Services/Emisi/Waste4AService.php create mode 100644 app/Services/Emisi/Waste4B1Service.php create mode 100644 app/Services/Emisi/Waste4B2Service.php create mode 100644 app/Services/Emisi/Waste4C1Service.php create mode 100644 app/Services/Emisi/Waste4C2aService.php create mode 100644 app/Services/Emisi/Waste4C2bService.php create mode 100644 app/Services/Emisi/Waste4C2cService.php create mode 100644 app/Services/Emisi/Waste4D1aService.php create mode 100644 app/Services/Emisi/Waste4D1cService.php create mode 100644 app/Services/Emisi/Waste4D1dService.php create mode 100644 app/Services/Emisi/Waste4D1eService.php create mode 100644 app/Services/Reports/CrfService.php create mode 100644 app/Services/Reports/GcomCrfService.php create mode 100644 app/Services/Reports/GpcOutputService.php create mode 100644 app/Services/Reports/WorksheetService.php create mode 100644 app/Services/Setting/ArService.php create mode 100644 app/Services/Setting/DataAktivitasService.php create mode 100644 app/Services/Setting/EfService.php create mode 100644 app/Services/Setting/EfSourceService.php create mode 100644 app/Services/Setting/GwpService.php create mode 100644 app/Services/Setting/PeraturanService.php create mode 100644 app/Services/Setting/UnitConversionService.php create mode 100644 app/Services/Setting/UnitService.php create mode 100644 app/Services/SigdCrudService.php create mode 100644 app/Services/Tool/CalculationService.php create mode 100644 app/Services/Tool/CopyActivityService.php create mode 100644 app/Services/Tool/LockActivityService.php create mode 100644 app/Services/Tool/ProdusenCalculateService.php create mode 100644 app/Services/User/AgencyService.php create mode 100644 app/Services/User/UserGroupService.php create mode 100644 app/Services/User/UserService.php create mode 100644 app/View/Components/ActivityYearSelect.php create mode 100644 app/View/Components/InventoryYearSelect.php create mode 100644 app/helpers.php create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.bootstrap.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.bootstrap.min.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.bootstrap4.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.bootstrap4.min.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.dataTables.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.dataTables.min.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.foundation.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.foundation.min.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.jqueryui.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.jqueryui.min.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.semanticui.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/buttons.semanticui.min.css create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/common.scss create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/css/mixins.scss create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.bootstrap.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.bootstrap.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.bootstrap4.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.bootstrap4.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.colVis.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.colVis.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.flash.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.flash.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.foundation.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.foundation.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.html5.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.html5.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.jqueryui.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.jqueryui.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.print.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.print.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.semanticui.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/buttons.semanticui.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/dataTables.buttons.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/js/dataTables.buttons.min.js create mode 100644 public/assets/plugins/DataTables/Buttons-1.5.4/swf/flashExport.swf create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.bootstrap.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.bootstrap.min.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.bootstrap4.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.bootstrap4.min.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.foundation.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.foundation.min.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.jqueryui.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.jqueryui.min.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.semanticui.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/dataTables.semanticui.min.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/jquery.dataTables.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/css/jquery.dataTables.min.css create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/images/sort_asc.png create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/images/sort_asc_disabled.png create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/images/sort_both.png create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/images/sort_desc.png create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/images/sort_desc_disabled.png create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.bootstrap.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.bootstrap.min.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.bootstrap4.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.bootstrap4.min.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.foundation.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.foundation.min.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.jqueryui.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.jqueryui.min.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.semanticui.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/dataTables.semanticui.min.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/jquery.dataTables.js create mode 100644 public/assets/plugins/DataTables/DataTables-1.10.18/js/jquery.dataTables.min.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.bootstrap.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.bootstrap.min.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.bootstrap4.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.bootstrap4.min.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.dataTables.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.dataTables.min.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.foundation.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.foundation.min.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.jqueryui.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.jqueryui.min.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.semanticui.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/css/fixedColumns.semanticui.min.css create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/dataTables.fixedColumns.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/dataTables.fixedColumns.min.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.bootstrap.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.bootstrap.min.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.bootstrap4.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.bootstrap4.min.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.dataTables.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.foundation.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.foundation.min.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.jqueryui.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.jqueryui.min.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.semanicui.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.semanticui.js create mode 100644 public/assets/plugins/DataTables/FixedColumns-3.2.5/js/fixedColumns.semanticui.min.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.bootstrap.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.bootstrap.min.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.bootstrap4.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.bootstrap4.min.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.dataTables.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.dataTables.min.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.foundation.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.foundation.min.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.jqueryui.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.jqueryui.min.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.semanticui.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/css/fixedHeader.semanticui.min.css create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/dataTables.fixedHeader.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/dataTables.fixedHeader.min.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.bootstrap.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.bootstrap.min.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.bootstrap4.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.bootstrap4.min.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.dataTables.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.foundation.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.foundation.min.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.jqueryui.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.jqueryui.min.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.semanicui.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.semanticui.js create mode 100644 public/assets/plugins/DataTables/FixedHeader-3.1.4/js/fixedHeader.semanticui.min.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.bootstrap.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.bootstrap.min.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.bootstrap4.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.bootstrap4.min.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.dataTables.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.dataTables.min.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.foundation.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.foundation.min.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.jqueryui.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.jqueryui.min.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.semanticui.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/css/keyTable.semanticui.min.css create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/dataTables.keyTable.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/dataTables.keyTable.min.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.bootstrap.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.bootstrap.min.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.bootstrap4.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.bootstrap4.min.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.dataTables.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.foundation.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.foundation.min.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.jqueryui.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.jqueryui.min.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.semanicui.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.semanticui.js create mode 100644 public/assets/plugins/DataTables/KeyTable-2.5.0/js/keyTable.semanticui.min.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.bootstrap.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.bootstrap.min.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.bootstrap4.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.bootstrap4.min.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.dataTables.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.dataTables.min.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.foundation.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.foundation.min.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.jqueryui.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.jqueryui.min.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.semanticui.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/css/responsive.semanticui.min.css create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/dataTables.responsive.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/dataTables.responsive.min.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.bootstrap.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.bootstrap.min.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.bootstrap4.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.bootstrap4.min.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.foundation.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.foundation.min.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.jqueryui.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.jqueryui.min.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.semanticui.js create mode 100644 public/assets/plugins/DataTables/Responsive-2.2.2/js/responsive.semanticui.min.js create mode 100644 public/assets/plugins/DataTables/datatables.custom.css create mode 100644 public/assets/plugins/DataTables/datatables.min.css create mode 100644 public/assets/plugins/DataTables/datatables.min.js create mode 100644 resources/views/modules/components/activity-year-select.blade.php create mode 100644 resources/views/modules/components/adaptation-year-select.blade.php create mode 100644 resources/views/modules/components/inventory-year-select.blade.php create mode 100644 resources/views/modules/components/mitigation-year-select.blade.php create mode 100644 resources/views/modules/components/sumber-data-card.blade.php create mode 100644 resources/views/modules/form/action.blade.php create mode 100644 resources/views/modules/form/aktivitas-user.blade.php create mode 100644 resources/views/modules/form/approve.blade.php create mode 100644 resources/views/modules/form/copy.blade.php create mode 100644 resources/views/modules/form/import.blade.php create mode 100644 resources/views/modules/form/index-adaptasi-edit.blade.php create mode 100644 resources/views/modules/form/index-adaptasi-pdf.blade.php create mode 100644 resources/views/modules/form/index-adaptasi-thankyou.blade.php create mode 100644 resources/views/modules/form/index-adaptasi-view.blade.php create mode 100644 resources/views/modules/form/index-adaptasi.blade.php create mode 100644 resources/views/modules/form/index-kehutanan.blade.php create mode 100644 resources/views/modules/form/index-mitigasi-edit.blade.php create mode 100644 resources/views/modules/form/index-mitigasi-pdf.blade.php create mode 100644 resources/views/modules/form/index-mitigasi-thankyou.blade.php create mode 100644 resources/views/modules/form/index-mitigasi-view.blade.php create mode 100644 resources/views/modules/form/index-mitigasi.blade.php create mode 100644 resources/views/modules/form/index.blade.php create mode 100644 resources/views/modules/form/livestock-manure/create.blade.php create mode 100644 resources/views/modules/form/livestock-manure/edit.blade.php create mode 100644 resources/views/modules/form/livestock-manure/index.blade.php create mode 100644 resources/views/modules/form/lock.blade.php create mode 100644 resources/views/modules/form/metadata/index.blade.php create mode 100644 resources/views/modules/form/metadata/list.blade.php create mode 100644 resources/views/modules/form/scripts.blade.php create mode 100644 resources/views/modules/form/table.blade.php create mode 100644 resources/views/modules/reports/crf/index.blade.php create mode 100644 resources/views/modules/reports/crf/report.blade.php create mode 100644 resources/views/modules/reports/crf/row.blade.php create mode 100644 resources/views/modules/reports/crf/table.blade.php create mode 100644 resources/views/modules/reports/gcom-crf/index-backup.blade.php create mode 100644 resources/views/modules/reports/gcom-crf/index.blade.php create mode 100644 resources/views/modules/reports/gcom-crf/note.blade.php create mode 100644 resources/views/modules/reports/gcom-crf/report.blade.php create mode 100644 resources/views/modules/reports/gcom-crf/table.blade.php create mode 100644 resources/views/modules/reports/gpc-output/index.blade.php create mode 100644 resources/views/modules/reports/gpc-output/report.blade.php create mode 100644 resources/views/modules/reports/gpc-output/table.blade.php create mode 100644 resources/views/modules/reports/worksheet/index.blade.php create mode 100644 resources/views/modules/reports/worksheet/report.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/1A1a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/1A1b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/1A1c.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/1A2.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/1A3.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/1A4a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/1A4b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/1A5.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3A1.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3A2a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3A2b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B1a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B1b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B2a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B2b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B3a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B3b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B4a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B4b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B5a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B5b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B6a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3B6b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3C1a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3C1b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3C3.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3C4.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3C5.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/3C6.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-c.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-d.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-e.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-f.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-g.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-h.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-i.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-j.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4A-k.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4B1.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4B2.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4C1.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4C2a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4C2b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4C2c.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4D1a.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4D1b.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4D1c.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4D1d.blade.php create mode 100644 resources/views/modules/reports/worksheet/tables/4D1e.blade.php create mode 100644 resources/views/modules/setting/ar/create.blade.php create mode 100644 resources/views/modules/setting/ar/edit.blade.php create mode 100644 resources/views/modules/setting/ar/index.blade.php create mode 100644 resources/views/modules/setting/ef-source/create.blade.php create mode 100644 resources/views/modules/setting/ef-source/edit.blade.php create mode 100644 resources/views/modules/setting/ef-source/index.blade.php create mode 100644 resources/views/modules/setting/ef/create.blade.php create mode 100644 resources/views/modules/setting/ef/edit.blade.php create mode 100644 resources/views/modules/setting/ef/index.blade.php create mode 100644 resources/views/modules/setting/ef/modal.blade.php create mode 100644 resources/views/modules/setting/file-data-aktivitas/create.blade.php create mode 100644 resources/views/modules/setting/file-data-aktivitas/edit.blade.php create mode 100644 resources/views/modules/setting/file-data-aktivitas/index.blade.php create mode 100644 resources/views/modules/setting/file-peraturan/create.blade.php create mode 100644 resources/views/modules/setting/file-peraturan/edit.blade.php create mode 100644 resources/views/modules/setting/file-peraturan/index.blade.php create mode 100644 resources/views/modules/setting/gwp/index.blade.php create mode 100644 resources/views/modules/setting/unit-conversion/index.blade.php create mode 100644 resources/views/modules/setting/unit/create.blade.php create mode 100644 resources/views/modules/setting/unit/edit.blade.php create mode 100644 resources/views/modules/setting/unit/index.blade.php create mode 100644 resources/views/modules/tool/calculation/create.blade.php create mode 100644 resources/views/modules/tool/calculation/create.blade.php.bak create mode 100644 resources/views/modules/tool/calculation/index.blade.php create mode 100644 resources/views/modules/tool/copy/index.blade.php create mode 100644 resources/views/modules/tool/lock/index.blade.php create mode 100644 resources/views/modules/tool/produsen-calculate/index.blade.php diff --git a/app/Console/Commands/CopyActivityQueue.php b/app/Console/Commands/CopyActivityQueue.php new file mode 100644 index 0000000..f631004 --- /dev/null +++ b/app/Console/Commands/CopyActivityQueue.php @@ -0,0 +1,127 @@ +rowActive() + ->first(); + + if ($processing) { + return; + } + + $process = ActivityCopy::where('status', SigdStatus::PENDING) + ->rowActive() + ->orderBy('created_at', 'asc') + ->first(); + + if (!$process) { + return; + } + + $process->update([ + 'executed_time' => now(), + 'status' => SigdStatus::PROSES, + ]); + + $this->createLogFile($process); + $this->logMessage('info', 'Salin data aktivitas untuk Tahun: ' . $process->to_year . ', dari sumber Tahun: ' . $process->from_year . ', id: ' . $process->id); + + try { + $isLocked = ActivityLock::isLocked($process->to_year); + if ($isLocked) { + $this->logMessage('warning', 'Salin data aktivitas untuk Tahun: ' . $process->to_year . ', dari sumber Tahun: ' . $process->from_year . ', id: ' . $process->id . ' sedang dikunci dan tidak dapat melakukan salin data.'); + + $process->update([ + 'finished_time' => now(), + 'status' => SigdStatus::GAGAL, + ]); + + return; + } + + $this->executeService($process); + + $process->update([ + 'finished_time' => now(), + 'status' => SigdStatus::SELESAI, + ]); + + $this->logMessage('info', 'Salin data aktivitas untuk Tahun: ' . $process->to_year . ', dari sumber Tahun: ' . $process->from_year . ', id: ' . $process->id . ' berhasil diselesaikan.'); + } catch (\Exception $e) { + $this->logMessage('error', 'Terjadi kesalahan saat proses salin data aktivitas, id: ' . $process->id . '. Error: ' . $e->getMessage()); + throw $e; + } + } + + private function createLogFile(ActivityCopy $process) + { + $logDirectory = storage_path('logs/copy/'); + + if (!File::exists($logDirectory)) { + File::makeDirectory($logDirectory, 0755, true); + } + + $logFileName = $logDirectory . $process->to_year . '_' . $process->from_year . '_' . $process->id . '.log'; + file_put_contents($logFileName, ''); + + $this->logFilePath = $logFileName; + } + + private function executeService($process) + { + $service = "\\App\\Services\\Tool\\CopyActivityService"; + + try { + $serviceClass = app($service); + if (method_exists($serviceClass, 'copyAllData')) { + $serviceClass->copyAllData($process->from_year, $process->to_year); + } else { + $this->logMessage('error', get_class($serviceClass) . " tidak memiliki method copyAllData."); + } + } catch (\Exception $e) { + $this->logMessage('error', "Error saat menjalankan " . get_class($serviceClass) . ": " . $e->getMessage()); + + $process->update([ + 'executed_time' => null, + 'finished_time' => null, + 'status' => SigdStatus::PENDING, + ]); + + throw $e; + } + } + + private function logMessage($level, $message) + { + $this->line($message); // Output to console + + // Log to the file + $formattedMessage = '[' . now() . '] ' . strtoupper($level) . ': ' . $message . PHP_EOL; + if ($this->logFilePath) { + file_put_contents($this->logFilePath, $formattedMessage, FILE_APPEND); + } + } +} diff --git a/app/Console/Commands/EmisiCalculationQueue.php b/app/Console/Commands/EmisiCalculationQueue.php new file mode 100644 index 0000000..a51c06e --- /dev/null +++ b/app/Console/Commands/EmisiCalculationQueue.php @@ -0,0 +1,214 @@ +rowActive()->first(); + if ($processing) { + return; + } + + $calculation = Calculation::where('calculation_status', SigdStatus::PENDING) + ->rowActive()->orderBy('created_at', 'asc')->first(); + if (!$calculation) { + // $this->logMessage('info', 'Semua kalkulasi emisi telah berhasil diselesaikan.'); + return; + } + + $calculation->update([ + 'executed_time' => now(), + 'calculation_status' => SigdStatus::PROSES, + ]); + + $this->createLogFile($calculation); + $this->logMessage('info', 'Kalkulasi Emisi untuk Tahun Inventory: ' . $calculation->inventory_year . ', id: ' . $calculation->id); + + $isLocked = ActivityLock::isLocked($calculation->inventory_year); + if ($isLocked) { + $this->logMessage('warning', 'Kalkulasi Emisi untuk Tahun Inventory: ' . $calculation->inventory_year . ', id: ' . $calculation->id . ' sedang dikunci dan tidak dapat melakukan kalkulasi.'); + + $calculation->update([ + 'finished_time' => now(), + 'calculation_status' => SigdStatus::GAGAL, + ]); + + return; + } + + if ($calculation->energy) $this->executeService('energy', $calculation); + if ($calculation->agriculture) $this->executeService('agriculture', $calculation); + if ($calculation->folu) $this->executeService('folu', $calculation); + if ($calculation->waste) $this->executeService('waste', $calculation); + if ($calculation->ippu) $this->executeService('ippu', $calculation); + + // Execute Energy GPC emission calculation + $this->energyGPCCalc($calculation); + + // Execute mapping IPCC to GPC + $this->gpcMapping($calculation); + + $calculation->update([ + 'finished_time' => now(), + 'calculation_status' => SigdStatus::SELESAI, + ]); + + $this->logMessage('info', 'Kalkulasi Emisi untuk Tahun Inventory: ' . $calculation->inventory_year . ', id: ' . $calculation->id . ' berhasil diselesaikan.'); + } catch (Exception $e) { + $this->logMessage('error', 'Terjadi kesalahan saat kalkulasi emisi, id: ' . $calculation->id . '. Error: ' . $e->getMessage()); + throw $e; + } + } + + + private function createLogFile(Calculation $calculation) + { + $logDirectory = storage_path('logs/calculation/'); + + $this->logMessage('info', 'Checking if log directory exists: ' . $logDirectory); + + if (!File::exists($logDirectory)) { + $this->logMessage('info', 'Directory not found. Creating directory: ' . $logDirectory); + File::makeDirectory($logDirectory, 0755, true); + } + + $logFileName = $logDirectory . $calculation->inventory_year . '_' . $calculation->id . '.log'; + file_put_contents($logFileName, ''); + + $this->logFilePath = $logFileName; + $this->logMessage('info', 'Log file created: ' . $logFileName); + } + + private function executeService($sector, $calculation) + { + // if ($calculation->$sector) { + $wsList = ReferenceWs::where('sector', $sector) + ->whereNotNull('code')->rowActive()->get(); + + foreach ($wsList as $ws) { + if ($ws->code == '4d1_ef') { + continue; + } + + $service = "\\App\\Services\\Emisi\\" . class_basename($ws->model) . "Service"; + $this->logMessage('service yang dijalankan', "{$service}"); + + try { + $serviceClass = app($service); + if (method_exists($service, 'save')) { + $serviceClass->save($ws->code, $calculation->inventory_year); + $this->logMessage('info', "Kalkulasi Emisi pada Worksheet {$ws->ws_code}. {$ws->ws_title} telah berhasil diselesaikan."); + } else { + $this->logMessage('error', "{$service} tidak memiliki method proses kalkulasi."); + } + } catch (\Exception $e) { + $this->logMessage('error', "Error saat menjalankan {$service} pada sektor {$sector}: " . $e->getMessage()); + + $calculation->update([ + 'executed_time' => null, + 'finished_time' => null, + 'calculation_status' => SigdStatus::PENDING, + ]); + + throw $e; + } + } + // } + } + + private function gpcMapping($calculation) + { + $service = "\\App\\Services\\Emisi\\GpcMappingService"; + + try { + $serviceClass = app($service); + if (method_exists($service, 'save')) { + $serviceClass->save($calculation->inventory_year); + $this->logMessage('info', "Mapping dari Emisi IPCC ke GPC telah berhasil diproses"); + } else { + $this->logMessage('error', get_class($serviceClass) . " tidak memiliki method save."); + } + } catch (\Exception $e) { + $this->logMessage('error', "Error saat menjalankan " . get_class($serviceClass) . ": " . $e->getMessage()); + + $calculation->update([ + 'executed_time' => null, + 'finished_time' => null, + 'calculation_status' => SigdStatus::PENDING, + ]); + + throw $e; + } + } + + private function energyGPCCalc($calculation) + { + $service = "\\App\\Services\\Emisi\\EnergyGPCService"; + + try { + $serviceClass = app($service); + if (method_exists($service, 'save')) { + $serviceClass->save($calculation->inventory_year); + $this->logMessage('info', "Kalkulasi Emisi Energi GPC telah berhasil diproses"); + } else { + $this->logMessage('error', get_class($serviceClass) . " tidak memiliki method save."); + } + } catch (\Exception $e) { + $this->logMessage('error', "Error saat menjalankan " . get_class($serviceClass) . ": " . $e->getMessage()); + + $calculation->update([ + 'executed_time' => null, + 'finished_time' => null, + 'calculation_status' => SigdStatus::PENDING, + ]); + + throw $e; + } + } + + + private function logMessage($level, $message) + { + $this->line($message); // Output to console + + // Log to the file + $formattedMessage = '[' . now() . '] ' . strtoupper($level) . ': ' . $message . PHP_EOL; + if ($this->logFilePath) { + file_put_contents($this->logFilePath, $formattedMessage, FILE_APPEND); + } + + $this->info($message); + // Also log to Laravel's default log channel + if ($level === 'error') { + Log::error($message); + } + // } else { + // Log::info($message); + // } + } +} diff --git a/app/Console/Commands/EmisiCalculationQueue.php.bak b/app/Console/Commands/EmisiCalculationQueue.php.bak new file mode 100644 index 0000000..a51c06e --- /dev/null +++ b/app/Console/Commands/EmisiCalculationQueue.php.bak @@ -0,0 +1,214 @@ +rowActive()->first(); + if ($processing) { + return; + } + + $calculation = Calculation::where('calculation_status', SigdStatus::PENDING) + ->rowActive()->orderBy('created_at', 'asc')->first(); + if (!$calculation) { + // $this->logMessage('info', 'Semua kalkulasi emisi telah berhasil diselesaikan.'); + return; + } + + $calculation->update([ + 'executed_time' => now(), + 'calculation_status' => SigdStatus::PROSES, + ]); + + $this->createLogFile($calculation); + $this->logMessage('info', 'Kalkulasi Emisi untuk Tahun Inventory: ' . $calculation->inventory_year . ', id: ' . $calculation->id); + + $isLocked = ActivityLock::isLocked($calculation->inventory_year); + if ($isLocked) { + $this->logMessage('warning', 'Kalkulasi Emisi untuk Tahun Inventory: ' . $calculation->inventory_year . ', id: ' . $calculation->id . ' sedang dikunci dan tidak dapat melakukan kalkulasi.'); + + $calculation->update([ + 'finished_time' => now(), + 'calculation_status' => SigdStatus::GAGAL, + ]); + + return; + } + + if ($calculation->energy) $this->executeService('energy', $calculation); + if ($calculation->agriculture) $this->executeService('agriculture', $calculation); + if ($calculation->folu) $this->executeService('folu', $calculation); + if ($calculation->waste) $this->executeService('waste', $calculation); + if ($calculation->ippu) $this->executeService('ippu', $calculation); + + // Execute Energy GPC emission calculation + $this->energyGPCCalc($calculation); + + // Execute mapping IPCC to GPC + $this->gpcMapping($calculation); + + $calculation->update([ + 'finished_time' => now(), + 'calculation_status' => SigdStatus::SELESAI, + ]); + + $this->logMessage('info', 'Kalkulasi Emisi untuk Tahun Inventory: ' . $calculation->inventory_year . ', id: ' . $calculation->id . ' berhasil diselesaikan.'); + } catch (Exception $e) { + $this->logMessage('error', 'Terjadi kesalahan saat kalkulasi emisi, id: ' . $calculation->id . '. Error: ' . $e->getMessage()); + throw $e; + } + } + + + private function createLogFile(Calculation $calculation) + { + $logDirectory = storage_path('logs/calculation/'); + + $this->logMessage('info', 'Checking if log directory exists: ' . $logDirectory); + + if (!File::exists($logDirectory)) { + $this->logMessage('info', 'Directory not found. Creating directory: ' . $logDirectory); + File::makeDirectory($logDirectory, 0755, true); + } + + $logFileName = $logDirectory . $calculation->inventory_year . '_' . $calculation->id . '.log'; + file_put_contents($logFileName, ''); + + $this->logFilePath = $logFileName; + $this->logMessage('info', 'Log file created: ' . $logFileName); + } + + private function executeService($sector, $calculation) + { + // if ($calculation->$sector) { + $wsList = ReferenceWs::where('sector', $sector) + ->whereNotNull('code')->rowActive()->get(); + + foreach ($wsList as $ws) { + if ($ws->code == '4d1_ef') { + continue; + } + + $service = "\\App\\Services\\Emisi\\" . class_basename($ws->model) . "Service"; + $this->logMessage('service yang dijalankan', "{$service}"); + + try { + $serviceClass = app($service); + if (method_exists($service, 'save')) { + $serviceClass->save($ws->code, $calculation->inventory_year); + $this->logMessage('info', "Kalkulasi Emisi pada Worksheet {$ws->ws_code}. {$ws->ws_title} telah berhasil diselesaikan."); + } else { + $this->logMessage('error', "{$service} tidak memiliki method proses kalkulasi."); + } + } catch (\Exception $e) { + $this->logMessage('error', "Error saat menjalankan {$service} pada sektor {$sector}: " . $e->getMessage()); + + $calculation->update([ + 'executed_time' => null, + 'finished_time' => null, + 'calculation_status' => SigdStatus::PENDING, + ]); + + throw $e; + } + } + // } + } + + private function gpcMapping($calculation) + { + $service = "\\App\\Services\\Emisi\\GpcMappingService"; + + try { + $serviceClass = app($service); + if (method_exists($service, 'save')) { + $serviceClass->save($calculation->inventory_year); + $this->logMessage('info', "Mapping dari Emisi IPCC ke GPC telah berhasil diproses"); + } else { + $this->logMessage('error', get_class($serviceClass) . " tidak memiliki method save."); + } + } catch (\Exception $e) { + $this->logMessage('error', "Error saat menjalankan " . get_class($serviceClass) . ": " . $e->getMessage()); + + $calculation->update([ + 'executed_time' => null, + 'finished_time' => null, + 'calculation_status' => SigdStatus::PENDING, + ]); + + throw $e; + } + } + + private function energyGPCCalc($calculation) + { + $service = "\\App\\Services\\Emisi\\EnergyGPCService"; + + try { + $serviceClass = app($service); + if (method_exists($service, 'save')) { + $serviceClass->save($calculation->inventory_year); + $this->logMessage('info', "Kalkulasi Emisi Energi GPC telah berhasil diproses"); + } else { + $this->logMessage('error', get_class($serviceClass) . " tidak memiliki method save."); + } + } catch (\Exception $e) { + $this->logMessage('error', "Error saat menjalankan " . get_class($serviceClass) . ": " . $e->getMessage()); + + $calculation->update([ + 'executed_time' => null, + 'finished_time' => null, + 'calculation_status' => SigdStatus::PENDING, + ]); + + throw $e; + } + } + + + private function logMessage($level, $message) + { + $this->line($message); // Output to console + + // Log to the file + $formattedMessage = '[' . now() . '] ' . strtoupper($level) . ': ' . $message . PHP_EOL; + if ($this->logFilePath) { + file_put_contents($this->logFilePath, $formattedMessage, FILE_APPEND); + } + + $this->info($message); + // Also log to Laravel's default log channel + if ($level === 'error') { + Log::error($message); + } + // } else { + // Log::info($message); + // } + } +} diff --git a/app/Console/Commands/ProdusenCalculateQueue.php b/app/Console/Commands/ProdusenCalculateQueue.php new file mode 100644 index 0000000..266ce00 --- /dev/null +++ b/app/Console/Commands/ProdusenCalculateQueue.php @@ -0,0 +1,124 @@ +rowActive()->first(); + + if ($processing) { + return; + } + + $process = ActivityProdusenCalculate::where('status', SigdStatus::PENDING) + ->rowActive()->orderBy('created_at', 'asc')->first(); + + if (!$process) { + return; + } + + $process->update([ + 'executed_time' => now(), + 'status' => SigdStatus::PROSES, + ]); + + $this->createLogFile($process); + $this->logMessage('info', 'Hitung Data dari Produsen untuk Tahun: ' . $process->inventory_year . ', id: ' . $process->id); + + try { + $isLocked = ActivityLock::isLocked($process->inventory_year); + if ($isLocked) { + $this->logMessage('warning', 'Hitung Data dari Produsen untuk Tahun: ' . $process->inventory_year . ', id: ' . $process->id . ' sedang dikunci dan tidak dapat melakukan Hitung Data dari Produsen.'); + + $process->update([ + 'finished_time' => now(), + 'status' => SigdStatus::GAGAL, + ]); + + return; + } + + $this->executeService($process); + + $process->update([ + 'finished_time' => now(), + 'status' => SigdStatus::SELESAI, + ]); + + $this->logMessage('info', 'Hitung Data dari Produsen untuk Tahun: ' . $process->inventory_year . ', id: ' . $process->id . ' berhasil diselesaikan.'); + } catch (\Exception $e) { + $this->logMessage('error', 'Terjadi kesalahan saat proses Hitung Data dari Produsen, id: ' . $process->id . '. Error: ' . $e->getMessage()); + throw $e; + } + } + + private function createLogFile(ActivityProdusenCalculate $process) + { + $logDirectory = storage_path('logs/produsen_calculate/'); + + if (!File::exists($logDirectory)) { + File::makeDirectory($logDirectory, 0755, true); + } + + $logFileName = $logDirectory . $process->to_year . '_' . $process->from_year . '_' . $process->id . '.log'; + file_put_contents($logFileName, ''); + + $this->logFilePath = $logFileName; + } + + private function executeService($process) + { + $service = "\\App\\Services\\Tool\\ProdusenCalculateService"; + + try { + $serviceClass = app($service); + if (method_exists($serviceClass, 'calculateAndSave')) { + $serviceClass->calculateAndSave($process->inventory_year); + } else { + $this->logMessage('error', get_class($serviceClass) . " tidak memiliki method calculateAndSave."); + } + } catch (\Exception $e) { + $this->logMessage('error', "Error saat menjalankan " . get_class($serviceClass) . ": " . $e->getMessage()); + + $process->update([ + 'executed_time' => null, + 'finished_time' => null, + 'status' => SigdStatus::PENDING, + ]); + + throw $e; + } + } + + private function logMessage($level, $message) + { + $this->line($message); // Output to console + + // Log to the file + $formattedMessage = '[' . now() . '] ' . strtoupper($level) . ': ' . $message . PHP_EOL; + if ($this->logFilePath) { + file_put_contents($this->logFilePath, $formattedMessage, FILE_APPEND); + } + } +} diff --git a/app/Enums/ActivityType.php b/app/Enums/ActivityType.php new file mode 100644 index 0000000..511dced --- /dev/null +++ b/app/Enums/ActivityType.php @@ -0,0 +1,42 @@ + 'Login', + self::INSERT_ACTIVITY_DATA => 'Input Data Aktivitas', + self::UPDATE_ACTIVITY_DATA => 'Ubah Data Aktivitas', + self::INSERT_METADATA => 'Input Metadata', + self::DELETE_METADATA => 'Hapus Metadata', + + //new case + self::LOCK_ACTIVITY_FORM => 'Kunci Data Aktivitas', + self::UNLOCK_ACTIVITY_FORM => 'Buka Kunci Data Aktivitas', + self::COPY_ACTIVITY_FORM => 'Salin Data Aktivitas', + self::CALCULATION_EMISI => 'Buat Form Kalkulasi Emisi', + self::PRODUSEN_CALCULATE => 'Hitung Data dari Produsen', + self::APPROVAL_KONSOLIDASI => 'Data Aktivitas Produsen telah disetujui', + self::DISSAPPROVAL_KONSOLIDASI => 'Data Aktivitas Produsen batal disetujui', + + }; + } +} diff --git a/app/Enums/FruitVegetableCategory.php b/app/Enums/FruitVegetableCategory.php new file mode 100644 index 0000000..aeefbf1 --- /dev/null +++ b/app/Enums/FruitVegetableCategory.php @@ -0,0 +1,74 @@ + [ + 'Residential buildings' => [ + 1 => (object)['gpc_code' => 'i_1_1', 'notation_key' => 'NE'], + 2 => (object)['gpc_code' => 'i_1_2', 'notation_key' => 'NE'], + 3 => (object)['gpc_code' => 'i_1_3', 'notation_key' => 'NE'], // DEFAULT + ], + 'Commercial buildings & facilities' => [ + 1 => (object)['gpc_code' => ['i_2_1','i_6_1'], 'notation_key' => 'NE'], + 2 => (object)['gpc_code' => ['i_2_2','i_6_2'], 'notation_key' => 'NE'], + 3 => (object)['gpc_code' => ['i_2_3','i_6_3'], 'notation_key' => 'NE'], // DEFAULT + ], + 'Institutional buildings & facilities' => [ + 1 => (object)['gpc_code' => 'ie', 'notation_key' => 'IE'], + 2 => (object)['gpc_code' => 'ie', 'notation_key' => 'IE'], + 3 => (object)['gpc_code' => 'ie', 'notation_key' => 'IE'], + 'info' => 'Included in Commercial Buildings and Facilities' + ], + 'Industrial buildings & facilities' => [ + 1 => (object)['gpc_code' => 'i_3_1', 'notation_key' => 'NE'], + 2 => (object)['gpc_code' => 'i_3_2', 'notation_key' => 'NE'], + 3 => (object)['gpc_code' => 'i_3_3', 'notation_key' => 'NE'], + ], + 'Agriculture' => [ + 1 => (object)['gpc_code' => 'i_5_1', 'notation_key' => 'NO'], + 2 => (object)['gpc_code' => 'i_5_2', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'i_5_3', 'notation_key' => 'NE'], // DEFAULT + ], + 'Fugitive emissions' => [ + 1 => (object)['gpc_code' => 'i_8_1', 'notation_key' => 'C'], + 3 => (object)['gpc_code' => 'i_7_1', 'notation_key' => 'NO'], + ] + ], + self::TRANSPORTATION => [ + 'On-road' => [ + 1 => (object)['gpc_code' => 'ii_1_1', 'notation_key' => 'NE'], + 2 => (object)['gpc_code' => 'ii_1_2', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'ii_1_3', 'notation_key' => 'NE'], // DEFAULT + ], + 'Rail' => [ + 1 => (object)['gpc_code' => 'ii_2_1', 'notation_key' => 'IE'], + 2 => (object)['gpc_code' => 'ii_2_2', 'notation_key' => 'NE'], + 3 => (object)['gpc_code' => 'ii_2_3', 'notation_key' => 'NE'], // DEFAULT + ], + 'Waterborne navigation' => [ + 1 => (object)['gpc_code' => 'ii_3_1', 'notation_key' => 'IE'], + 2 => (object)['gpc_code' => 'ii_3_2', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'ii_3_3', 'notation_key' => 'NE'], // DEFAULT + ], + 'Aviation' => [ + 1 => (object)['gpc_code' => 'ii_4_1', 'notation_key' => 'NO'], + 2 => (object)['gpc_code' => 'ii_4_2', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'ii_4_3', 'notation_key' => 'NE'], // DEFAULT + ], + 'Off-road' => [ + 1 => (object)['gpc_code' => 'ii_5_1', 'notation_key' => 'NO'], + 2 => (object)['gpc_code' => 'ii_5_2', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'ii_5_3', 'notation_key' => 'NE'], // DEFAULT + ], + ], + self::WASTE => [ + 'Solid waste disposal' => [ + 1 => (object)['gpc_code' => ['iii_1_1','iii_1_3'], 'notation_key' => 'NE'], + 3 => (object)['gpc_code' => 'iii_1_3', 'notation_key' => 'NO'], + ], + 'Biological treatment' => [ + 1 => (object)['gpc_code' => ['iii_2_1','iii_2_3'], 'notation_key' => 'NE'], + 3 => (object)['gpc_code' => 'iii_2_3', 'notation_key' => 'NO'], + ], + 'Incinerated and open burning' => [ + 1 => (object)['gpc_code' => ['iii_3_1','iii_3_3'], 'notation_key' => 'NE'], + 3 => (object)['gpc_code' => 'iii_3_3', 'notation_key' => 'NE'], + ], + 'Wastewater' => [ + 1 => (object)['gpc_code' => ['iii_4_1','iii_4_3'], 'notation_key' => 'NE'], + 3 => (object)['gpc_code' => 'iii_4_3', 'notation_key' => 'NE'], + ], + ], + self::IPPU => [ + 'Industrial processes' => [ + 1 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'iv_1', 'notation_key' => 'NE'], // DEFAULT + ], + 'Produce Use' => [ + 1 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'iv_2', 'notation_key' => 'NE'], // DEFAULT + ], + ], + self::AFOLU => [ + 'Livestock' => [ + 1 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'v_1', 'notation_key' => 'NE'], // DEFAULT + ], + 'Land Use' => [ + 1 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'v_2', 'notation_key' => 'NE'], // DEFAULT + ], + 'Other AFOLU' => [ + 1 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'v_3', 'notation_key' => 'NE'], // DEFAULT + ], + ], + self::GRID_SUPPLIED_ENERGY => [ + 'Electricity-only generation' => [ + 1 => (object)['gpc_code' => 'i_4_4', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + ], + 'CHP generation' => [ + 1 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + ], + 'Heat/cold generation' => [ + 1 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + ], + 'Local renewable generation' => [ + 1 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + 3 => (object)['gpc_code' => 'no', 'notation_key' => 'NO'], + ] + ], + }; + } + + public function getLabel(): string + { + return match ($this) { + self::STATIONARY_ENERGY => 'Stationary Energy', + self::TRANSPORTATION => 'Transportation', + self::WASTE => 'Waste', + self::IPPU => 'IPPU', + self::AFOLU => 'AFOLU', + self::GRID_SUPPLIED_ENERGY => 'Generation of grid-supplied energy', + }; + } + + public static function getAllData(): array + { + $data = []; + foreach (self::cases() as $case) { + $data[$case->getLabel()] = $case->getData(); + } + return $data; + } +} diff --git a/app/Enums/LandCategory.php b/app/Enums/LandCategory.php new file mode 100644 index 0000000..abd4cf9 --- /dev/null +++ b/app/Enums/LandCategory.php @@ -0,0 +1,37 @@ + 'Forest', + self::CROPLAND => 'Cropland', + self::GRASSLAND => 'Grassland', + self::WETLAND => 'Wetland', + self::SETTLEMENT => 'Settlement', + self::OTHERLAND => 'Otherland', + }; + } + + public static function getSubcategories(LandCategory $category): array + { + return match ($category) { + self::FOREST => ['hp', 'hs', 'hmp', 'hrp', 'ht', 'hms', 'hrs'], + self::CROPLAND => ['pk', 'pt', 'pc', 'sw', 'tr'], + self::GRASSLAND => ['b', 's', 'br'], + self::WETLAND => ['a', 'rw'], + self::SETTLEMENT => ['pm'], + self::OTHERLAND => ['t', 'aw', 'tm', 'bdr', 'tb'], + }; + } +} diff --git a/app/Enums/LandType.php b/app/Enums/LandType.php new file mode 100644 index 0000000..5d4fafc --- /dev/null +++ b/app/Enums/LandType.php @@ -0,0 +1,42 @@ +name === $code) { + return $case->value; // Return the description + } + } + + return '-'; // Return a default value if not found + } +} diff --git a/app/Enums/LingkupAksesData.php b/app/Enums/LingkupAksesData.php new file mode 100644 index 0000000..8e48f11 --- /dev/null +++ b/app/Enums/LingkupAksesData.php @@ -0,0 +1,26 @@ + 'Semua Data', + self::INTERNAL => 'Internal Instansi', + }; + } + + public static function getOptions(): array + { + $options = []; + foreach (self::cases() as $case) { + $options[$case->value] = $case->label(); + } + return $options; + } +} diff --git a/app/Enums/Sector.php b/app/Enums/Sector.php new file mode 100644 index 0000000..4cac97d --- /dev/null +++ b/app/Enums/Sector.php @@ -0,0 +1,37 @@ + strtolower(str_replace('_', '', $case->name)), + 'name' => $case->value + ]; + }, self::cases()); + } + + public static function getName(string $code): ?string + { + foreach (self::cases() as $case) { + if (strtolower(str_replace(' ', '_', $case->name)) === $code) { + return $case->value; + } + } + return null; + } +} diff --git a/app/Enums/SigdStatus.php b/app/Enums/SigdStatus.php new file mode 100644 index 0000000..6004157 --- /dev/null +++ b/app/Enums/SigdStatus.php @@ -0,0 +1,22 @@ + 'PENDING', + self::PROSES => 'PROSES', + self::SELESAI => 'SELESAI', + self::GAGAL => 'GAGAL', + }; + } +} diff --git a/app/Enums/TransportationCategory.php b/app/Enums/TransportationCategory.php new file mode 100644 index 0000000..39423c8 --- /dev/null +++ b/app/Enums/TransportationCategory.php @@ -0,0 +1,52 @@ +value => self::ON_ROAD->getCategories(), + self::WATERBORNE->value => self::WATERBORNE->getCategories(), + self::AVIATION->value => self::AVIATION->getCategories(), + default => [], + }; + } +} diff --git a/app/Enums/WsCategory.php b/app/Enums/WsCategory.php new file mode 100644 index 0000000..03503e2 --- /dev/null +++ b/app/Enums/WsCategory.php @@ -0,0 +1,41 @@ + '1A1a - Main Activity Electricity and Heat Production', + self::manufaktur => '1A2 - Manufacturing Industry and Construction', + self::transportasi => '1A3 - Transport', + self::komersial => '1A4a - Commercial / Institutional', + self::rumah_tangga => '1A5 - Non-specified', + + self::enteric_fermentation => '3A1 - Methane Emissions from Enteric Fermentation and Manure Management', + self::manure_mgmt => '3A2a - Manure Management:(CH4) from Manure Management Systems', + self::manure_mgmt_direct_n2o => '3A2b - Manure Management: Direct N2O Emissions from Manure Management Systems', + self::manure_mgmt_indirect_n2o => '3C6 - Indirect N2O Emissions from Manure Management', + }; + } + + public static function fromName(string $name){ + + return constant("self::$name"); + } +} diff --git a/app/Exports/CrfExport.php b/app/Exports/CrfExport.php new file mode 100644 index 0000000..328e12c --- /dev/null +++ b/app/Exports/CrfExport.php @@ -0,0 +1,105 @@ +sector = $sector; + $this->crfData = $crfData; + $this->worksheets = $worksheets; + } + + public function view(): View + { + return view('reports.crf.report', [ + 'sector' => $this->sector, + 'crfData' => $this->crfData, + 'worksheets' => $this->worksheets, + 'isExport' => true + ]); + } + + public function styles(Worksheet $sheet) + { + // Apply styles to the header rows + $tableStartRow = 6; + $tableHeaderRow = $tableStartRow; // + ($this->wsData->ws_header - 1); + $tableEndRow = $sheet->getHighestRow(); + $columnStart = 'A'; + $columnEnd = $sheet->getHighestColumn(); + + $sheet->getStyle('A1:A3')->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => Alignment::HORIZONTAL_LEFT], + ]); + + // Apply table header styles + $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableHeaderRow)->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER], + ]); + + // Apply borders to the entire table + $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableEndRow)->applyFromArray([ + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, + 'color' => ['argb' => 'FF000000'], + ], + ], + ]); + + // Set dynamic column styles based on data + foreach ($sheet->getRowIterator() as $row) { + $rowIndex = $row->getRowIndex(); + + // Skip the header rows + if ($rowIndex >= $tableStartRow && $rowIndex <= $tableHeaderRow) { + continue; + } + + foreach ($row->getCellIterator() as $cell) { + $value = $cell->getValue(); + $formatCode = NumberFormat::FORMAT_GENERAL; + + // Check if value is numeric + if (is_numeric($value)) { + $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT); + + // Apply number formatting + // $cell->setValue($value); + $formatCode = floor($value) != $value ? '#,##0.0#' : '#,##0'; + $cell->getStyle()->getNumberFormat()->setFormatCode($formatCode); + } else { + $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT); + } + } + } + + // Auto-fit columns + foreach (range('A', $sheet->getHighestColumn()) as $col) { + $sheet->getColumnDimension($col)->setAutoSize(true); + } + + // // Style footer row + // $sheet->getStyle($columnStart . $tableEndRow . ':' . $columnEnd . $tableEndRow)->applyFromArray([ + // 'font' => ['bold' => true], + // 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT], + // ]); + + return []; + } +} diff --git a/app/Exports/FormExport.php b/app/Exports/FormExport.php new file mode 100644 index 0000000..43b80f4 --- /dev/null +++ b/app/Exports/FormExport.php @@ -0,0 +1,192 @@ +data = $data; + $this->isTemplate = $data['isTemplate']; + $this->titleExcel = $data['titleExcel']; + $this->inventoryYear = $data['inventoryYear']; + + $this->instansi = $data['instansi']; + } + + public function collection() + { + // Fetch necessary data + $data = $this->data; + $formDetails = $data['formDetails']; + $unitsMap = $data['unitsMap']; + $activityFormDetails = $data['activityFormDetails']; + + $excelData = collect(); + + if (!$this->isTemplate) { + // Add title row + $titleRow = [$this->titleExcel]; + $excelData->push($titleRow); + $excelData->push(['']); + + // Add print date row + $tanggalCetakRow = ['Tanggal Cetak: ' . now()->format('Y-m-d')]; + $excelData->push($tanggalCetakRow); + $excelData->push(['']); + } + + // Add header row + $header = ['TAHUN']; + foreach ($formDetails as $detail) { + $activityName = $detail->activity ? $detail->activity->name : 'N/A'; + $unitCode = $unitsMap[$detail->unit_code]->code ?? ''; + $header[] = $activityName . "\n" . '(' . $unitCode . ')'; + } + $excelData->push($header); + + // Add data rows + $years = activityYearRange($this->inventoryYear); + foreach ($years as $year) { + $row = [$year]; + foreach ($formDetails as $detail) { + $activityValue = isset($activityFormDetails[$year]) + ? $activityFormDetails[$year] + ->where('activity_code', $detail->activity_code) + ->where('activity_unit_code', $detail->unit_code) + ->first()->activity_value ?? '' + : ''; + + $row[] = $activityValue; + } + $excelData->push($row); + } + + return $excelData; + } + + public function title(): string + { + return 'Template'; // Sheet name + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + // Set page properties + $event->sheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE); + $event->sheet->getPageSetup()->setFitToWidth(1); + $event->sheet->getPageSetup()->setFitToHeight(0); + $event->sheet->getPageMargins()->setTop(0.5); + $event->sheet->getPageMargins()->setBottom(0.5); + $event->sheet->getPageMargins()->setLeft(0.5); + $event->sheet->getPageMargins()->setRight(0.5); + $event->sheet->getPageSetup()->setPaperSize(PageSetup::PAPERSIZE_A4); + $event->sheet->getPageSetup()->setHorizontalCentered(true); + $event->sheet->getPageSetup()->setVerticalCentered(true); + + if (!$this->isTemplate) { + // Merge cells for title and print date + // $event->sheet->mergeCells('A1:' . $event->sheet->getHighestColumn() . '1'); + // $event->sheet->mergeCells('A3:' . $event->sheet->getHighestColumn() . '3'); + + $event->sheet->mergeCells('A1:' . 'S1'); + $event->sheet->mergeCells('A3:' . 'S3'); + } + + // Set alignment and make header row bold and centered + $headerRow = $this->isTemplate == 1 ? 'A1' : 'A5'; + $valueRow = $this->isTemplate == 1 ? 1 : 5; + $event->sheet->getStyle($headerRow . ':' . $event->sheet->getHighestColumn() . $valueRow) + ->applyFromArray([ + 'font' => [ + 'bold' => true, + ], + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_CENTER, + 'vertical' => Alignment::VERTICAL_CENTER, + 'wrapText' => true, // Ensure wrap text is enabled for newlines + ], + ]); + + // Apply borders to the table + $event->sheet->getDelegate()->getStyle($headerRow . ':' . $event->sheet->getDelegate()->getHighestColumn() . $event->sheet->getDelegate()->getHighestRow()) + ->applyFromArray([ + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => Border::BORDER_THIN, + 'color' => ['argb' => 'FF000000'], + ], + ], + ]); + + // Auto size columns starting from A onwards + $highestColumn = $event->sheet->getDelegate()->getHighestColumn(); + $columns = $this->generateColumnsRange('A', $highestColumn); + + $valueRow = $this->isTemplate == 1 ? '2' : '6'; + foreach ($columns as $column) { + $event->sheet->getDelegate()->getColumnDimension($column)->setAutoSize(true); + + // Apply number format to data columns (B onwards) + if ($column != 'A') { + $highestRow = $event->sheet->getDelegate()->getHighestRow($column); + for ($row = $valueRow; $row <= $highestRow; $row++) { + $cellValue = $event->sheet->getCell($column . $row)->getValue(); + $formatCode = NumberFormat::FORMAT_GENERAL; + if (!$this->isTemplate) { + if (is_numeric($cellValue)) { + $formatCode = floor($cellValue) != $cellValue ? '#,##0.0###############' : '#,##0'; + } + } + + $event->sheet->getStyle($column . $row)->getNumberFormat()->setFormatCode($formatCode); + } + + if ($this->isTemplate) { + $event->sheet->getStyle($column . '2:' . $column . $event->sheet->getDelegate()->getHighestRow()) + ->applyFromArray([ + 'fill' => [ + 'fillType' => Fill::FILL_SOLID, + 'color' => ['argb' => 'FFFFFF00'], + ], + ]); + } + } + } + }, + ]; + } + + function generateColumnsRange($start, $end) + { + $columns = []; + $current = $start; + + while ($current !== $end) { + $columns[] = $current; + $current++; + } + $columns[] = $end; + + return $columns; + } +} diff --git a/app/Exports/FormKehutananExport.php b/app/Exports/FormKehutananExport.php new file mode 100644 index 0000000..c00961a --- /dev/null +++ b/app/Exports/FormKehutananExport.php @@ -0,0 +1,188 @@ +data = $data; + $this->isTemplate = $data['isTemplate']; + $this->titleExcel = $data['titleExcel']; + $this->inventoryYear = $data['inventoryYear']; + } + + public function collection() + { + // Fetch necessary data + $data = $this->data; + $lands = $data['lands']; + // $unitsMap = $data['unitsMap']; + $activityFormDetails = $data['activityFormDetails']; + + $excelData = collect(); + + if (!$this->isTemplate) { + // Add title row + $titleRow = [$this->titleExcel]; + $excelData->push($titleRow); + $excelData->push(['']); + + // Add print date row + $tanggalCetakRow = ['Tanggal Cetak: ' . now()->format('Y-m-d')]; + $excelData->push($tanggalCetakRow); + $excelData->push(['']); + $excelData->push([$data['inventoryYear'] - 1]); + } + + // Add header row + $header = $this->isTemplate ? [''] : [$data['inventoryYear'] - 2]; + foreach ($lands as $land) { + $header[] = $land; + } + $excelData->push($header); + + // Add data rows + foreach ($lands as $land1) { + $row = [$land1]; + foreach ($lands as $land2) { + $activityValue = isset($activityFormDetails) + ? optional( + $activityFormDetails + ->where('activity_code', strtolower($land1 . '_' . $land2)) + ->first(), + )->activity_value + : ''; + $row[] = $activityValue; + } + $excelData->push($row); + } + + return $excelData; + } + + public function title(): string + { + return 'Template'; // Sheet name + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + // Set page properties + $event->sheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE); + $event->sheet->getPageSetup()->setFitToWidth(1); + $event->sheet->getPageSetup()->setFitToHeight(0); + $event->sheet->getPageMargins()->setTop(0.5); + $event->sheet->getPageMargins()->setBottom(0.5); + $event->sheet->getPageMargins()->setLeft(0.5); + $event->sheet->getPageMargins()->setRight(0.5); + $event->sheet->getPageSetup()->setPaperSize(PageSetup::PAPERSIZE_A4); + $event->sheet->getPageSetup()->setHorizontalCentered(true); + $event->sheet->getPageSetup()->setVerticalCentered(true); + + if (!$this->isTemplate) { + // Merge cells for title and print date + $event->sheet->mergeCells('A1:' . $event->sheet->getHighestColumn() . '1'); + $event->sheet->mergeCells('A3:' . $event->sheet->getHighestColumn() . '3'); + $event->sheet->mergeCells('A5:' . $event->sheet->getHighestColumn() . '5'); + + // Set A5 center and bold + $event->sheet->getStyle('A5')->applyFromArray([ + 'font' => [ + 'bold' => true, + ], + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_CENTER, + 'vertical' => Alignment::VERTICAL_CENTER, + ], + ]); + } + + // Set alignment and make header row bold and centered + $headerRow = $this->isTemplate == 1 ? 'A1' : 'A5'; + $valueRow = $this->isTemplate == 1 ? 1 : 6; + $event->sheet->getStyle($headerRow . ':' . $event->sheet->getHighestColumn() . $valueRow) + ->applyFromArray([ + 'font' => [ + 'bold' => true, + ], + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_CENTER, + 'vertical' => Alignment::VERTICAL_CENTER, + 'wrapText' => true, // Ensure wrap text is enabled for newlines + ], + ]); + + // Apply borders to the table + $event->sheet->getDelegate()->getStyle($headerRow . ':' . $event->sheet->getDelegate()->getHighestColumn() . $event->sheet->getDelegate()->getHighestRow()) + ->applyFromArray([ + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => Border::BORDER_THIN, + 'color' => ['argb' => 'FF000000'], + ], + ], + ]); + + // Auto size columns starting from A onwards + foreach (range('A', $event->sheet->getDelegate()->getHighestColumn()) as $column) { + $event->sheet->getDelegate()->getColumnDimension($column)->setAutoSize(true); + } + + // Apply number format to data columns (B onwards) + $dataColumns = range('B', $event->sheet->getDelegate()->getHighestColumn()); + $valueRow = $this->isTemplate == 1 ? '2' : '7'; + foreach ($dataColumns as $column) { + $highestRow = $event->sheet->getDelegate()->getHighestRow($column); + for ($row = $valueRow; $row <= $highestRow; $row++) { + $cellValue = $event->sheet->getCell($column . $row)->getValue(); + $formatCode = NumberFormat::FORMAT_GENERAL; + if (!$this->isTemplate) { + if (is_numeric($cellValue)) { + $formatCode = floor($cellValue) != $cellValue ? '#,##0.0###############' : '#,##0'; + } + } + + $event->sheet->getStyle($column . $row)->getNumberFormat()->setFormatCode($formatCode); + } + } + + $event->sheet->getStyle('A' . $valueRow . ':A' . $event->sheet->getDelegate()->getHighestRow()) + ->applyFromArray([ + 'font' => [ + 'bold' => true, + ], + ]); + + if ($this->isTemplate) { + foreach ($dataColumns as $column) { + $event->sheet->getStyle($column . '2:' . $column . $event->sheet->getDelegate()->getHighestRow()) + ->applyFromArray([ + 'fill' => [ + 'fillType' => Fill::FILL_SOLID, + 'color' => ['argb' => 'FFFFFF00'], + ], + ]); + } + } + }, + ]; + } +} diff --git a/app/Exports/GcomCrfExport.php b/app/Exports/GcomCrfExport.php new file mode 100644 index 0000000..3c4e2dd --- /dev/null +++ b/app/Exports/GcomCrfExport.php @@ -0,0 +1,104 @@ +inventoryYear = $inventoryYear; + $this->activityYear = $activityYear; + $this->gpcData = $gpcData; + $this->gpc = $gpc; + } + + public function view(): View + { + return view('reports.gcom-crf.report', [ + 'inventoryYear' => $this->inventoryYear, + 'activityYear' => $this->activityYear, + 'gpcData' => $this->gpcData, + 'gpc' => $this->gpc, + 'isExport' => true + ]); + } + + public function styles(Worksheet $sheet) + { + $tableStartRow = 6; + $tableHeaderRow = $tableStartRow + 2; + $tableEndRow = $sheet->getHighestRow(); + $columnStart = 'A'; + $columnEnd = $sheet->getHighestColumn(); + + $sheet->getStyle('A1:A3')->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => Alignment::HORIZONTAL_LEFT], + ]); + $sheet->mergeCells('A1:' . $columnEnd . '1'); + $sheet->mergeCells('A2:' . $columnEnd . '2'); + $sheet->mergeCells('A3:' . $columnEnd . '3'); + + // Apply table header styles + $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableHeaderRow)->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER], + ]); + + // Apply borders to the entire table + $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableEndRow)->applyFromArray([ + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, + 'color' => ['argb' => 'FF000000'], + ], + ], + ]); + + // Set dynamic column styles based on data + foreach ($sheet->getRowIterator() as $row) { + $rowIndex = $row->getRowIndex(); + + // Skip the header rows + if ($rowIndex >= $tableStartRow && $rowIndex <= $tableHeaderRow) { + continue; + } + + foreach ($row->getCellIterator() as $cell) { + $value = $cell->getValue(); + $formatCode = NumberFormat::FORMAT_GENERAL; + + if (is_numeric($value)) { + $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT); + + $formatCode = floor($value) != $value ? '#,##0.0#' : '#,##0'; + $cell->getStyle()->getNumberFormat()->setFormatCode($formatCode); + } else { + $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT); + } + } + } + + // Auto-fit columns + foreach (range('A', $sheet->getHighestColumn()) as $col) { + $sheet->getColumnDimension($col)->setAutoSize(true); + } + + // // Style footer row + // $sheet->getStyle($columnStart . $tableEndRow . ':' . $columnEnd . $tableEndRow)->applyFromArray([ + // 'font' => ['bold' => true], + // 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT], + // ]); + + return []; + } +} diff --git a/app/Exports/GpcOutputExport.php b/app/Exports/GpcOutputExport.php new file mode 100644 index 0000000..ab762ba --- /dev/null +++ b/app/Exports/GpcOutputExport.php @@ -0,0 +1,119 @@ +inventoryYear = $inventoryYear; + $this->gpcOutputs = $gpcOutputs; + $this->gpcOutputRList = $gpcOutputRList; + } + + public function view(): View + { + return view('reports.gpc-output.report', [ + 'inventoryYear' => $this->inventoryYear, + 'gpcOutputs' => $this->gpcOutputs, + 'gpcOutputRList' => $this->gpcOutputRList, + 'isExport' => true + ]); + } + + public function styles(Worksheet $sheet) + { + $tableStartRow = 6; + $tableHeaderRow = $tableStartRow; + $tableEndRow = $sheet->getHighestRow(); + $columnStart = 'A'; + $columnEnd = $sheet->getHighestColumn(); + + $sheet->getStyle('A1:A3')->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => Alignment::HORIZONTAL_LEFT], + ]); + $sheet->mergeCells('A1:' . $columnEnd . '1'); + $sheet->mergeCells('A2:' . $columnEnd . '2'); + $sheet->mergeCells('A3:' . $columnEnd . '3'); + + // Apply table header styles + $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableHeaderRow)->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER], + ]); + + // Apply borders to the entire table + $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableEndRow)->applyFromArray([ + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, + 'color' => ['argb' => 'FF000000'], + ], + ], + ]); + + // Set dynamic column styles based on data + foreach ($sheet->getRowIterator() as $row) { + $rowIndex = $row->getRowIndex(); + + // Skip the header rows + if ($rowIndex >= $tableStartRow && $rowIndex <= $tableHeaderRow) { + continue; + } + + foreach ($row->getCellIterator() as $cell) { + $value = $cell->getValue(); + $formatCode = NumberFormat::FORMAT_GENERAL; + + if (is_numeric($value)) { + $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT); + + $formatCode = floor($value) != $value ? '#,##0.0#' : '#,##0'; + $cell->getStyle()->getNumberFormat()->setFormatCode($formatCode); + } else { + $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT); + } + } + } + + // Auto-fit columns + $highestColumn = $sheet->getHighestColumn(); + $columns = $this->generateColumnsRange('A', $highestColumn); + foreach ($columns as $column) { + $sheet->getColumnDimension($column)->setAutoSize(true); + } + + + // // Style footer row + // $sheet->getStyle($columnStart . $tableEndRow . ':' . $columnEnd . $tableEndRow)->applyFromArray([ + // 'font' => ['bold' => true], + // 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT], + // ]); + + return []; + } + + function generateColumnsRange($start, $end) + { + $columns = []; + $current = $start; + + while ($current !== $end) { + $columns[] = $current; + $current++; + } + $columns[] = $end; + + return $columns; + } +} diff --git a/app/Exports/WorksheetExport.php b/app/Exports/WorksheetExport.php new file mode 100644 index 0000000..a357d67 --- /dev/null +++ b/app/Exports/WorksheetExport.php @@ -0,0 +1,105 @@ +wsData = $wsData; + $this->emisiData = $emisiData; + } + + public function view(): View + { + return view('reports.worksheet.report', [ + 'wsData' => $this->wsData, + 'emisiData' => $this->emisiData, + 'isExport' => true + ]); + } + + public function styles(Worksheet $sheet) + { + // Apply styles to the header rows + $tableStartRow = 6; + $tableHeaderRow = $tableStartRow + ($this->wsData->ws_header - 1); + $tableEndRow = $sheet->getHighestRow(); + $columnStart = 'A'; + $columnEnd = $sheet->getHighestColumn(); + + $sheet->getStyle('A1:A3')->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => Alignment::HORIZONTAL_LEFT], + ]); + $sheet->mergeCells('A1:' . $columnEnd . '1'); + $sheet->mergeCells('A2:' . $columnEnd . '2'); + $sheet->mergeCells('A3:' . $columnEnd . '3'); + + // Apply table header styles + $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableHeaderRow)->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER], + ]); + + // Apply borders to the entire table + $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableEndRow)->applyFromArray([ + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, + 'color' => ['argb' => 'FF000000'], + ], + ], + ]); + + // Set dynamic column styles based on data + foreach ($sheet->getRowIterator() as $row) { + $rowIndex = $row->getRowIndex(); + + // Skip the header rows + if ($rowIndex >= $tableStartRow && $rowIndex <= $tableHeaderRow) { + continue; + } + + foreach ($row->getCellIterator() as $cell) { + $value = $cell->getValue(); + $formatCode = NumberFormat::FORMAT_GENERAL; + + // Check if value is numeric + if (is_numeric($value)) { + $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT); + + // Apply number formatting + // $cell->setValue($value); + $formatCode = floor($value) != $value ? '#,##0.0###' : '#,##0'; + $cell->getStyle()->getNumberFormat()->setFormatCode($formatCode); + } else { + $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT); + } + } + } + + // Style footer row + // $footerRowStyle = $sheet->getStyle($columnStart . $tableEndRow . ':' . $columnEnd . $tableEndRow); + // $footerRowStyle->applyFromArray([ + // 'font' => ['bold' => true], + // ]); + // $sheet->getStyle($columnStart . $tableEndRow)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); + + // Auto-fit columns + foreach (range('A', $sheet->getHighestColumn()) as $col) { + $sheet->getColumnDimension($col)->setAutoSize(true); + } + + return []; + } +} diff --git a/app/Helpers/FormulaEvaluator.php b/app/Helpers/FormulaEvaluator.php new file mode 100644 index 0000000..c387609 --- /dev/null +++ b/app/Helpers/FormulaEvaluator.php @@ -0,0 +1,56 @@ + 0 ? '' : ''; if ($access2) { $active2 = activeMenuClass($p2->module) ? 'mm-active' : ''; - $html .= '