diff --git a/build_mosaic.sh b/build_mosaic.sh new file mode 100755 index 0000000..4ec725d --- /dev/null +++ b/build_mosaic.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +filename="report_dummie.docx" +weeks_ago="0" +report_date="2022-12-12" + +# Parse de command line argumenten +while [ "$#" -gt 0 ]; do + case "$1" in + --weeks_ago=*) + weeks_ago="${1#*=}" + ;; + *) + echo "Onbekende optie: $1" + exit 1 + ;; + esac + shift +done + +# Controleer of de vereiste argumenten zijn ingesteld +if [ -z "$filename" ] || [ -z "$weeks_ago" ] || [ -z $report_date ]; then + echo "Missende argumenten. Gebruik: build_reports.sh --filename=hello.txt --weeks_ago=3 --report_date=2020-01-01" + exit 1 +fi + + +echo "Weeks ago: $weeks_ago" +cd /Users/mfolkerts/smartCane/r_app +Rscript 2_CI_data_prep.R $weeks_ago \ No newline at end of file diff --git a/build_report.sh b/build_report.sh index dd6da8f..2959f36 100755 --- a/build_report.sh +++ b/build_report.sh @@ -1,15 +1,51 @@ #!/bin/bash -## Runnen van Rmd bestand -# -e betekent "evalueren" en -i specificeert de input file -Rscript --version -echo $PATH + +filename="report_dummie.docx" +weeks_ago="0" +report_date="2022-12-12" + +# Parse de command line argumenten +while [ "$#" -gt 0 ]; do + case "$1" in + --filename=*) + filename="${1#*=}" + ;; + --weeks_ago=*) + weeks_ago="${1#*=}" + ;; + --report_date=*) + report_date="${1#*=}" + ;; + *) + echo "Onbekende optie: $1" + exit 1 + ;; + esac + shift +done + +# Controleer of de vereiste argumenten zijn ingesteld +if [ -z "$filename" ] || [ -z "$weeks_ago" ] || [ -z $report_date ]; then + echo "Missende argumenten. Gebruik: build_reports.sh --filename=hello.txt --weeks_ago=3 --report_date=2020-01-01" + exit 1 +fi + +# Je script logica hier +echo "Filename: $filename" +echo "Weeks ago: $weeks_ago" +echo "Report date: $report_date" + #script_dir="$(dirname "$0")" #echo $script_dir; #/bin/ps aux | grep fontd +#output_file="/Users/mfolkerts/smartCane/laravel_app/storage/app/chemba/$filename" +#echo "Output file: $output_file" echo '\n' echo 'zx28tb' | /usr/bin/sudo -S launchctl load -w /System/Library/LaunchAgents/com.apple.fontd.useragent.plist cd /Users/mfolkerts/smartCane/r_app -Rscript -e "rmarkdown::render('/Users/mfolkerts/smartCane/r_app/CI_Report_dashboard_planet.Rmd', 'all')" - +#Rscript -e "rmarkdown::render('/Users/mfolkerts/smartCane/r_app/CI_Report_dashboard_planet.Rmd', 'all')" +#Rscript 1_harvest_data_EcoFarm_v2.R +Rscript 2_CI_data_prep.R $weeks_ago +Rscript -e "rmarkdown::render('CI_report_dashboard_planet.Rmd', output_file='$filename', params=list(ref='$ref', report_date='$report_date'))" \ No newline at end of file diff --git a/laravel_app/app/Jobs/ProjectMosiacGeneratorJob.php b/laravel_app/app/Jobs/ProjectMosiacGeneratorJob.php new file mode 100644 index 0000000..f13ce40 --- /dev/null +++ b/laravel_app/app/Jobs/ProjectMosiacGeneratorJob.php @@ -0,0 +1,69 @@ +year = $year; + $this->week = $week; + // + } + + /** + * Execute the job. + */ + public function handle(): void + { + $weeksAgo = ProjectReport::weeksAgoForYearAndWeek($this->year, $this->week); + + $projectFolder = base_path('../'); + + $command = [ + sprintf('%sbuild_mosaic.sh', $projectFolder), + sprintf('--weeks_ago=%s', $weeksAgo), + ]; + + + $process = new Process($command); + $process->setTimeout(120); + $currentPath = '/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin/Users/mfolkerts/anaconda3/bin:/Library/Apple/usr/bin'; + + $process->setEnv(['PATH' => $currentPath.':/usr/local/Cellar/pandoc/3.1.8/bin/pandoc']); +// $process->setTimeout(36000); // stel een geschikte timeout in + $process->start(); + try { + $myOutput = []; + $process->wait(function ($type, $buffer) use (&$myOutput) { +// $this->stream(to: 'processOutput', content: $buffer); + $myOutput[] = $buffer; + logger($buffer); + }); + $this->processOutput = collect($myOutput)->join('\n'); + + } catch (ProcessFailedException $exception) { + echo $exception->getMessage(); + + } + } +} diff --git a/laravel_app/app/Livewire/Projects/MosaicManager.php b/laravel_app/app/Livewire/Projects/MosaicManager.php new file mode 100644 index 0000000..e784de8 --- /dev/null +++ b/laravel_app/app/Livewire/Projects/MosaicManager.php @@ -0,0 +1,58 @@ + '', + 'year' => '', + ]; + public $showCreateModal = false; + + public function mount(Project $project) { + $this->path = $project->download_path; + } + + public function render() + { + return view('livewire.projects.mosaic-manager', [ + 'downloads' => $this->project + ]); + } + + public function saveMosiac(){ + $this->validate([ + 'formData.year' => 'required', + 'formData.week' => 'required', + ]); + + ProjectMosiacGeneratorJob::dispatch($this->project, $this->formData['year'], $this->formData['week']); + + $this->showCreateModal = false; + } + + public function openCreateMosiacsModal(){ + $this->showCreateModal = true; + } + + public function getDateRangeProperty() + { + if (empty($this->formData['week']) || strlen($this->formData['year']) !== 4) { + return 'Invalid week or year'; + } + $begin = now() + ->setISODate($this->formData['year'], $this->formData['week']) + ->startOfWeek(); + $end = now() + ->setISODate($this->formData['year'], $this->formData['week']) + ->endOfWeek(); + return $begin->format('Y-m-d').' - '.$end->format('Y-m-d'); + } +} diff --git a/laravel_app/app/Models/Project.php b/laravel_app/app/Models/Project.php index e7e9b3d..30478d2 100644 --- a/laravel_app/app/Models/Project.php +++ b/laravel_app/app/Models/Project.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Carbon; +use Illuminate\Support\Collection; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; @@ -143,7 +144,7 @@ public function allMosaicsPresent(Carbon $endDate) $mosaicsNotPresentInFilesystem = $this->getMosiacFilenameListByEndDate($endDate) ->filter(function ($filename) { return !$this->getMosaicList()->contains(function ($mosaicFilename) use ($filename) { - return Str::endsWith( $mosaicFilename, substr($filename, -16)); + return Str::endsWith($mosaicFilename, substr($filename, -16)); }); }); if ($mosaicsNotPresentInFilesystem->count() === 0) { @@ -173,5 +174,52 @@ public function getMosiacFilenameListByEndDate(Carbon $endDate): \Illuminate\Sup return $result; } + public function getMosiacList() + { + return collect(Storage::files($this->getMosaicPath())) + ->filter(fn($file) => Str::endsWith($file, '.tif')) + ->sortByDesc(function ($file) { + $parts = explode('_', str_replace('.tif', '', $file)); + $week = $parts[1]; + $year = $parts[2]; + return $year.sprintf('%02d', $week); + }) + ->values(); + } + public static function getAllDatesOfWeeksInYear($year, $weekNumber): Collection + { + $startOfWeek = Carbon::now()->setISODate($year, $weekNumber)->startOfWeek(); + $dates = collect([]); + + for ($day = 0; $day < 7; $day++) { + $dates->push((clone $startOfWeek)->addDays($day)->toDateString()); + } + + return $dates; + } + + public function allMergedTiffsPresent(Collection $haystack, Collection $needles) + { + $needlesNotInHaystack = $needles->filter(function ($needle) use ($haystack) { + return !$haystack->contains(function ($item) use ($needle) { + return str_contains($item, $needle); + }); + }); + + if ($needlesNotInHaystack->count() > 0) { + $message = sprintf( + 'Missing merged tiffs: %s', + $needlesNotInHaystack->implode(', ') + ); + + throw new \Exception($message); + } + return true; + } + + public function getMergedTiffList() + { + return collect([]);; + } } diff --git a/laravel_app/app/Models/ProjectReport.php b/laravel_app/app/Models/ProjectReport.php index 93a3917..fb74e73 100644 --- a/laravel_app/app/Models/ProjectReport.php +++ b/laravel_app/app/Models/ProjectReport.php @@ -29,7 +29,12 @@ public function project() public function weeksAgo() { - return now()->diffInWeeks(now()->setISODate($this->year, $this->week)); + return $this->weeksAgoForYearAndWeek($this->year, $this->week); + } + + public static function weeksAgoForYearAndWeek($year, $week) + { + return now()->diffInWeeks(now()->setISODate($year, $week)); } public function getFileName() diff --git a/laravel_app/app/Rules/AllMergedTiffsPresentRule.php b/laravel_app/app/Rules/AllMergedTiffsPresentRule.php new file mode 100644 index 0000000..c81c437 --- /dev/null +++ b/laravel_app/app/Rules/AllMergedTiffsPresentRule.php @@ -0,0 +1,36 @@ +project = $project; + } + + public function passes($attribute, $value) + { + try { + return $this->project->allMergedTiffsPresent( + $this->project->getMergedTiffList(), + Project::getAllDatesOfWeeksInYear($value['year'], $value['week']) + ); + } catch (\Exception $e) { + $this->errorMessage = $e->getMessage(); + return false; + } + } + + public function message() + { + return $this->errorMessage; + } +} diff --git a/laravel_app/resources/views/components/mosaic-create-modal.blade.php b/laravel_app/resources/views/components/mosaic-create-modal.blade.php new file mode 100644 index 0000000..659a0dc --- /dev/null +++ b/laravel_app/resources/views/components/mosaic-create-modal.blade.php @@ -0,0 +1,51 @@ +@props([ + 'formData', + /** @var \App\Livewire\Projects\MosaicManager */ + 'manager' +]) + + + + + {{ __('Project') }} + + + + {{ __('Report generator for generating reports') }} + + + + +
+ + + +
+ + + + +
+
+ {!! $manager->dateRange !!} +
+
+ + + + {{ __('Saved.') }} + + + + {{ __('Cancel') }} + + + {{ __('Save') }} + + + +
+
diff --git a/laravel_app/resources/views/livewire/projects/mosaic-manager.blade.php b/laravel_app/resources/views/livewire/projects/mosaic-manager.blade.php new file mode 100644 index 0000000..6c14faa --- /dev/null +++ b/laravel_app/resources/views/livewire/projects/mosaic-manager.blade.php @@ -0,0 +1,52 @@ +
+
+
+
+

Reports

+

+
+
+ + Create Mosaic + +
+
+
+
+
+ + + + + + + + + + @foreach($project->getMosaicList() as $mosaic) + + + + + + @endforeach + +
+ Name + + Status + + Edit +
{{ $project->name }} + {{ $mosaic }} + + +
+
+
+
+
+ +
diff --git a/laravel_app/resources/views/livewire/projects/report-manager.blade.php b/laravel_app/resources/views/livewire/projects/report-manager.blade.php index 680fb08..6cc00fb 100644 --- a/laravel_app/resources/views/livewire/projects/report-manager.blade.php +++ b/laravel_app/resources/views/livewire/projects/report-manager.blade.php @@ -1,6 +1,4 @@
- -
diff --git a/laravel_app/resources/views/projects/show.blade.php b/laravel_app/resources/views/projects/show.blade.php index 4d946fa..57fef0c 100644 --- a/laravel_app/resources/views/projects/show.blade.php +++ b/laravel_app/resources/views/projects/show.blade.php @@ -12,6 +12,11 @@ :class="$tab.isSelected ? 'border-gray-200 bg-white' : 'border-transparent'" class="inline-flex rounded-l-md border-t border-l border-b px-5 py-2.5" >{{ __('Downloads') }} +