Patch level : 780

Files correlati     : ve1
Ricompilazione Demo : [ ]
Commento            :
0001671: Implementare una gestione profili documento personalzzata per cliente
Richiesta cliente Autotrasporti Galeotti aggiungere la possibilità di stampare i documenti con un profilo diverso a seconda del codice cliente.


git-svn-id: svn://10.65.10.50/trunk@20663 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2010-07-14 13:56:28 +00:00
parent a1405c1783
commit 0a28e94038

View File

@ -952,6 +952,7 @@ protected:
virtual bool get_next_mail(TToken_string& to, TToken_string& cc, TToken_string& ccn,
TString& subj, TString& text, TToken_string& attach, short& ui) const ;
void print_extra_copies(TReport_doc& report, const TRecordset& doc, TReport_book& book) const;
bool nome_report(const TRecordset& doc, int quale, TFilename& profilo) const;
public:
virtual bool create();
@ -1092,6 +1093,32 @@ void TReport_doc_app::print_extra_copies(TReport_doc& report, const TRecordset&
report.print(doc, book, false, extra_copies, false, false, false);
}
// Quale 0=standard,1=aggiuntivo,2=mail
bool TReport_doc_app::nome_report(const TRecordset& doc, int quale, TFilename& profilo) const
{
const TString4 tipodoc = doc.get(DOC_TIPODOC).as_string();
const TTipo_documento& tipo = cached_tipodoc(tipodoc);
bool ok = false;
switch (quale)
{
case 1: ok = tipo.additional_print_profile(profilo, 2); break;
case 2: ok = tipo.mail_print_profile(profilo); break;
default: ok = tipo.main_print_profile(profilo, 2); break;
}
if (ok) // Cerca eventuale personalizzazione per il singolo cliente
{
TString8 codcf = doc.get(DOC_CODCF).as_string(); codcf.right_just(6, '0');
TFilename path = profilo.name_only();
path << '_' << doc.get(DOC_TIPOCF) << codcf << ".rep";
if (path.custom_path())
profilo = path;
}
return ok;
}
bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_definitive)
{
const int docs = doc.items();
@ -1145,15 +1172,10 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
const bool send_mail = ( mode == out_mail || mode == out_signed_mail) && get_mail_address().full();
const bool paperless = send_mail || mode == out_pdf || mode == out_signed_pdf;
TFilename profilo; // Tenta di costruirsi il nome del report
bool ok = false;
// Se non stampo su carta cerco di usare un profilo con sfondo
if (paperless)
ok = tipo.mail_print_profile(profilo);
else
ok = tipo.main_print_profile(profilo, 2);
// Tenta di costruirsi il nome del report: se non stampo su carta cerco di usare un profilo con sfondo
TFilename profilo;
const bool ok = nome_report(doc, paperless ? 2 : 0, profilo);
if (ok)
{
int copies = 1;
@ -1196,7 +1218,7 @@ bool TReport_doc_app::print_loop(TRecordset& doc, TOutput_mode mode, bool is_def
}
// Stampa eventuali allegati
if (tipo.additional_print_profile(profilo, 2))
if (nome_report(doc, 1, profilo))
{
int copies = tipo.additional_ncopie();
if (copies <= 0) copies = 1;