1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-06-05 22:09:38 +02:00

feat: gestione allegati mail predefiniti per invii automatici

This commit is contained in:
MatteoPistorello
2025-05-16 17:08:54 +02:00
parent 2f390067f7
commit e825f254bb
4 changed files with 73 additions and 7 deletions

View File

@@ -368,6 +368,7 @@ elseif (post('op') == 'send-email') {
// Rimozione allegati predefiniti // Rimozione allegati predefiniti
$mail->resetPrints(); $mail->resetPrints();
$mail->resetUploads();
// Destinatari // Destinatari
$receivers = array_clean(post('destinatari')); $receivers = array_clean(post('destinatari'));

View File

@@ -162,12 +162,10 @@ if ($smtp['pec'] == 1 && $module->name == 'Fatture di vendita') {
$uploads = array_column($uploads, 'id'); $uploads = array_column($uploads, 'id');
} }
$categories = $template->categories; // Ottieni gli allegati dalle categorie associate al template
foreach ($categories as $category) { $template_uploads = $template->uploads;
$files = Upload::where('id_category', $category->id)->where('id_module', $id_module)->where('id_record', $id_record)->get(); if (!empty($template_uploads)) {
$uploads = array_merge($uploads, $files->pluck('id')->toArray()); $uploads = array_merge($uploads, $template_uploads->pluck('id')->toArray());
$files = Upload::where('id_category', $category->id)->where('id_module', Module::where('name', 'Anagrafiche')->first()->id)->where('id_record', setting('Azienda predefinita'))->get();
$uploads = array_merge($uploads, $files->pluck('id')->toArray());
$uploads = array_unique($uploads); $uploads = array_unique($uploads);
} }

View File

@@ -73,6 +73,11 @@ class Mail extends Model
$this->uploads()->attach($file_id, ['id_email' => $this->id, 'name' => $name]); $this->uploads()->attach($file_id, ['id_email' => $this->id, 'name' => $name]);
} }
public function resetUploads()
{
$this->uploads()->detach();
}
/** /**
* Aggiunge una stampa alla notifica. * Aggiunge una stampa alla notifica.
* *
@@ -267,10 +272,16 @@ class Mail extends Model
$this->addReceiver($template['bcc'], 'bcc'); $this->addReceiver($template['bcc'], 'bcc');
} }
// Incluesione stampe predefinite // Inclusione stampe predefinite
$prints = $template->prints; $prints = $template->prints;
foreach ($prints as $print) { foreach ($prints as $print) {
$this->addPrint($print['id']); $this->addPrint($print['id']);
} }
// Inclusione allegati predefiniti
$uploads = $template->uploads;
foreach ($uploads as $upload) {
$this->addUpload($upload['id']);
}
} }
} }

View File

@@ -86,6 +86,62 @@ class Template extends Model
{ {
return $this->belongsToMany(Categoria::class, 'em_files_categories_template', 'id_template', 'id_category'); return $this->belongsToMany(Categoria::class, 'em_files_categories_template', 'id_template', 'id_category');
} }
/**
* Accessor che ottiene dinamicamente gli uploads in base alle categorie selezionate.
* Questo metodo viene chiamato quando si accede a $template->uploads come proprietà.
*
* @return \Illuminate\Support\Collection
*/
public function getUploadsAttribute()
{
return $this->getUploadsFromCategories();
}
/**
* Ottiene tutti gli allegati associati alle categorie del template.
*
* @return \Illuminate\Support\Collection
*/
public function getUploadsFromCategories()
{
$uploads = [];
// Recupera le categorie associate al template
$categories = $this->categories;
// Per ogni categoria, recupera i file associati
foreach ($categories as $category) {
// Recupera i file del modulo corrente
if ($this->id_module) {
$files = \Models\Upload::where('id_category', $category->id)
->where('id_module', $this->id_module)
->get();
$uploads = array_merge($uploads, $files->all());
}
// Recupera anche i file dell'azienda predefinita
$id_module_anagrafiche = \Models\Module::where('name', 'Anagrafiche')->first()->id;
$id_record_azienda = setting('Azienda predefinita');
if ($id_record_azienda) {
$files = \Models\Upload::where('id_category', $category->id)
->where('id_module', $id_module_anagrafiche)
->where('id_record', $id_record_azienda)
->get();
$uploads = array_merge($uploads, $files->all());
}
}
// Rimuovi eventuali duplicati
$unique_uploads = [];
foreach ($uploads as $upload) {
$unique_uploads[$upload->id] = $upload;
}
return collect(array_values($unique_uploads));
}
public function translations() public function translations()
{ {