using SteamWare;
using System;
using System.Web;
namespace Data
{
///
/// Base class for action-enabled user controls
/// It is not meant to be be used directly.
///
public class ActionUserControl : System.Web.UI.UserControl
{
protected string urlType
{
get
{
return memLayer.ML.CRS("urlType");
}
}
protected int _idxRichiesta = 0;
///
/// Richiesta di cui mostrare la history
///
public int idxRichiesta
{
get
{
int answ = 0;
int.TryParse(Request.QueryString["idxRichiesta"], out answ);
return answ;
}
}
///
/// KEY amministratore in sessione
///
protected int idxAmm
{
get
{
return memLayer.ML.IntSessionObj("idxAmm");
}
}
///
/// KEY fornitore in sessione
///
protected int idxFornitore
{
get
{
return memLayer.ML.IntSessionObj("idxFornitore");
}
}
///
/// modalità edit corrente
///
public ER_EditMode currMode
{
get
{
return (ER_EditMode)memLayer.ML.objSessionObj("ER_EditMode");
}
set
{
memLayer.ML.setSessionVal("ER_EditMode", value);
}
}
///
/// Pagina corrente x redirect
///
string currPage
{
get
{
return HttpContext.Current.Request.Url.PathAndQuery;
}
}
///
/// Record della richiesta corrente
///
protected DS_app.ElencolRichRow ER_curr
{
get
{
DS_app.ElencolRichRow answ = null;
try
{
answ = DtProxy.man.taElRich.getByKey(idxRichiesta)[0];
}
catch
{ }
return answ;
}
}
///
/// Record della richiesta SPECIFICATA
///
///
///
protected DS_app.ElencolRichRow ER_spec(int idxRich)
{
DS_app.ElencolRichRow answ = null;
try
{
answ = DtProxy.man.taElRich.getByKey(idxRich)[0];
}
catch
{ }
return answ;
}
///
/// Restituisce il record dati del fornitore richiesto
///
///
///
protected DS_app.AnagFornitoriRow rigaFornitore(int idxFornitore)
{
// recupero dati della richiesta corrente
var riga = ER_curr;
DS_app.AnagFornitoriRow answ = null;
try
{
answ = DtProxy.man.taAF.getByKey(idxFornitore)[0];
}
catch
{ }
return answ;
}
///
/// Esegue l'azione richiesta e salva/invia email secondo parametri (DI SICURO a fornitore corrente, opz a amministratore e B2BC)
///
/// idx richiesta SPECIFICO
///
///
///
/// Nuovo stato da assegnare alla richiesta (se -9999 = NON FA NULLA)
/// Necessario fare redirect/reload pagina?
/// Notifica PAZ
/// Notifica PAM
/// Notifica PBO
public void eseguiAzioneIdxRich(int idxRich, string oggetto, string bodyTpl, string codAzione, int idxStato, bool doRedirect, bool notifyPAZ, bool notifyPAM, bool notifyPBO)
{
var riga = DtProxy.man.taElRich.getByKey(idxRich)[0];
saveDataSendEMail(oggetto, bodyTpl, codAzione, idxStato, doRedirect, notifyPAZ, notifyPAM, notifyPBO, riga);
logger.lg.scriviLog(string.Format("Effettuata azione con idxRich: {0} | oggetto: {1} | bodyTpl: {2} | codAzione: {3} | idxStato: {4} | doRedirect: {5} | notifyAmm: {6} | notifyB2BC: {7}", idxRich, oggetto, bodyTpl, codAzione, idxStato, doRedirect, notifyPAM, notifyPBO));
}
///
/// Esegue l'azione richiesta e salva/invia email secondo parametri (DI SICURO a fornitore corrente, opz a amministratore e B2BC)
///
///
///
///
/// Nuovo stato da assegnare alla richiesta (se -9999 = NON FA NULLA)
/// Necessario fare redirect/reload pagina?
/// Notifica PAZ
/// Notifica PAM
/// Notifica PBO
public void eseguiAzione(string oggetto, string bodyTpl, string codAzione, int idxStato, bool doRedirect, DS_app.ElencolRichRow riga, bool notifyPAZ, bool notifyPAM, bool notifyPBO)
{
// recupero dati della richiesta corrente
if (riga == null)
{
try
{
riga = ER_curr;
}
catch
{ }
}
// accodo msg non presidiato...
bodyTpl += "
ATTENZIONE: ti preghiamo di non rispondere alla presente e-mail, in quanto l'indirizzo non è presidiato. Per comunicazioni scrivi a info@b2bcondomini.it.";
saveDataSendEMail(oggetto, bodyTpl, codAzione, idxStato, doRedirect, notifyPAZ, notifyPAM, notifyPBO, riga);
}
///
/// Salva dati ed invia vera email
///
///
///
///
///
///
/// Notifica PAZ
/// Notifica PAM
/// Notifica PBO
///
private void saveDataSendEMail(string oggetto, string bodyTpl, string codAzione, int idxStato, bool doRedirect, bool notifyPAZ, bool notifyPAM, bool notifyPBO, DS_app.ElencolRichRow riga)
{
// hard coded: SE HO "HIDE" a fine azione --> privato (idxForn = 0) - es x le note RISERVATE
int idxForn = codAzione.EndsWith("HIDE") ? 0 : riga.idxFornitore;
// compongo elementi email...
string destinatario = "";
if (notifyPAZ)
{
if (idxForn > 0)
{
try
{
destinatario = DtProxy.man.taAF.getByKey(idxForn)[0].email;
}
catch (Exception exc)
{
destinatario = memLayer.ML.CRS("_adminEmail");
logger.lg.scriviLog(string.Format("Errore in recupero destinatario FORNITORE, usato _adminEmail --> {0}{1}---------------{2}{1}{1}", destinatario, Environment.NewLine, exc));
}
}
else
{
destinatario = memLayer.ML.CRS("_adminEmail");
oggetto = "RISERVATO - " + oggetto;
}
}
// 2018.12.04: aggiungo indirizzo a nome condominio...
string condominio = string.Format("{0} | {1}", riga.nom_cond, riga.indir_cond);
// compone corpo messaggio
string corpo = string.Format(bodyTpl, condominio, riga.genContatto, riga.telContatto, riga.messaggio);
// salvo azione
DtProxy.man.taER_Acts.InsertQuery(riga.idxRichiesta, idxForn, DateTime.Now, codAzione, devicesAuthProxy.stObj.utente, corpo);
// SE ho destinatario invio...
if (destinatario != "")
{
// invio!
utils.inviaEmail(destinatario, oggetto, corpo, 3); //!!!HARD CODED a 3 tutto
}
// verifico se inviare ANCHE a AMMINISTRATORE e sito B2BC
string notaPre = "";
if (notifyPAM)
{
try
{
var rigaCond = DtProxy.man.taAC.getByKey(riga.idxCond)[0];
var rigaAmm = DtProxy.man.taAAmm.getByKey(rigaCond.idxAmm)[0];
destinatario = rigaAmm.email;
corpo = corpo.Replace("/PAZ/", "/PAM/");
}
catch (Exception exc)
{
destinatario = memLayer.ML.CRS("_adminEmail");
logger.lg.scriviLog(string.Format("Errore in recupero destinatario AMMINISTRATORE, usato _adminEmail --> {0}{1}---------------{2}{1}{1}", destinatario, Environment.NewLine, exc));
}
// invio! aggiungendo in oggetto "COPIA per B2BC"
notaPre = "Copia email per AMMINISTRATORE
";
// invio!
utils.inviaEmail(destinatario, oggetto, notaPre + corpo, 3); //!!!HARD CODED a 3 tutto
}
if (notifyPBO)
{
destinatario = memLayer.ML.CRS("_b2bcEmail");
corpo = corpo.Replace("/PAZ/", "/PAM/");
// invio! aggiungendo in oggetto "COPIA per B2BC"
notaPre = "Copia email per B2BC
";
utils.inviaEmail(destinatario, oggetto, notaPre + corpo, 3); //!!!HARD CODED a 3 tutto
}
// cambio stato (se > -9999)
if (idxStato > -9999)
{
DtProxy.man.taElRich.UpdateStato(riga.idxRichiesta, idxStato);
}
// se richiesto redireziona...
if (doRedirect)
{
Response.Redirect(currPage);
}
}
#region azioni dirette
///
/// Gestione azione RICHIESTA PREVENTIVO
///
public void doQuoteReq(bool doRedirect)
{
// recupero dati della richiesta corrente
var riga = ER_curr;
creaRichPreventivoDaRiga(riga, doRedirect);
}
///
/// Gestione azione APPROVAZIONE PREVENTIVO specificando direttamente l'idxRichiesta
///
public void doQuoteReq(int idxRichiesta, bool doRedirect)
{
if (idxRichiesta > 0)
{
// recupero dati della richiesta corrente
DS_app.ElencolRichRow answ = null;
try
{
answ = DtProxy.man.taElRich.getByKey(idxRichiesta)[0];
creaRichPreventivoDaRiga(answ, doRedirect);
}
catch (Exception exc)
{
logger.lg.scriviLog($"Eccezuibe in creazione richeista preventivo doQuoteReq:{Environment.NewLine}{exc}");
}
}
}
///
/// Effettiva generazione richiesta preventivo
///
///
///
private void creaRichPreventivoDaRiga(DS_app.ElencolRichRow riga, bool doRedirect)
{
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
string oggetto = "RICHIESTA PREVENTIVO intervento n. " + idxRichiesta.ToString();
string bodyTpl =
"Richiesta PREVENTIVO
" +
"Buongiorno " + rigaForn.nome + "
" +
"Ti è stata assegnata una richiesta di intervento da www.b2bcondomini.it per la quale è stato deciso di procedere con preventivo e relativa approvazione. Ti chiediamo di predisporlo ed inviarlo sulla piattaforma al più presto.
" +
"Il condominio interessato è {0}, pregasi contattare {1} al numero {2}.
La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
string codAzione = "QuoteReq";
eseguiAzione(oggetto, bodyTpl, codAzione, 23, doRedirect, riga, true, false, false);
}
}
}
///
/// Gestione azione APPROVAZIONE PREVENTIVO
///
public void doQuoteApp()
{
// recupero dati della richiesta corrente
DS_app.ElencolRichRow riga = ER_curr;
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
string oggetto = "ACCETTAZIONE PREVENTIVO intervento n. " + idxRichiesta.ToString();
string bodyTpl =
"ACCETTAZIONE PREVENTIVO
" +
"Buongiorno " + rigaForn.nome + "
" +
"Il tuo preventivo è stato approvato. Ti chiediamo di procedere con le attività al più presto.
" +
"Il condominio interessato è {0}, pregasi contattare {1} al numero {2}.
La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
string codAzione = "QuoteApp";
eseguiAzione(oggetto, bodyTpl, codAzione, 27, true, riga, true, false, false);
}
}
}
///
/// Gestione azione INVIO SOLLECITO
///
public void doSendRem()
{
// recupero dati della richiesta corrente
var riga = ER_curr;
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
string oggetto = "SOLLECITO intervento n. " + idxRichiesta.ToString();
string bodyTpl =
"SOLLECITO risposta
" +
"Buongiorno " + rigaForn.nome + "
" +
"Ti è stata assegnata una richiesta di intervento da www.b2bcondomini.it e non hai ancora risposto entro i termini del servizio. Ti ricordiamo che se non lo farai al più presto la richiesta potrebbe venire riassegnata ad un altro fornitore.
" +
"Il condominio interessato è {0}, pregasi contattare {1} al numero {2}.
La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
string codAzione = "SendRem";
eseguiAzione(oggetto, bodyTpl, codAzione, 20, true, riga, true, false, false);
}
}
}
///
/// Gestione azione CAMBIO PRIORITA
///
///
///
///
public void doPrioMod(int idxPrior, string dataScad, string oraScad)
{
// recupero dati della richiesta corrente
var riga = ER_curr;
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
DateTime dataScadNew = DateTime.Now.Date;
TimeSpan oraScadNew = DateTime.Now.TimeOfDay;
string descrPriorita = "";
try
{
// sommo data-ora...
DateTime.TryParse(dataScad, out dataScadNew);
TimeSpan.TryParse(oraScad, out oraScadNew);
dataScadNew = dataScadNew.Add(oraScadNew);
// recupero priorità ad adesso...
var rigaPrio = DtProxy.man.taAP.getByKey(idxPrior)[0];
descrPriorita = rigaPrio.descrPriorita;
// salvo nuova data scadenza...
DtProxy.man.taElRich.UpdatePrior(idxRichiesta, idxPrior, dataScadNew);
}
catch
{ }
string oggetto = "CAMBIO PRIORITA' e SCADENZA intervento n. " + idxRichiesta.ToString();
string bodyTpl =
"CAMBIO PRIORITA' e SCADENZA
" +
"Buongiorno " + rigaForn.nome + "
" +
"Ti è stata assegnata una richiesta di intervento da www.b2bcondomini.it di cui è stata variata la priorità che ora è " + descrPriorita + " e la scadenza, ora impostata a " + dataScadNew.ToString("ddd dd.MM.yyyy HH:mm") + ".
" +
"Il condominio interessato è {0}, pregasi contattare {1} al numero {2}.
" +
"La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
string codAzione = "PrioMod";
eseguiAzione(oggetto, bodyTpl, codAzione, -9999, true, riga, true, false, false);
}
}
}
///
/// Gestione Azione ANNULLAMENTO e RIASSEGNAZIONE FORNITORE
///
///
///
public void doRemSetSupp(int idxArea, int idxForn)
{
// recupero dati della richiesta corrente
var riga = ER_curr;
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
// STEP 1: scrivo al VECCHIO per notificare FINE ASSEGNAZIONE
string oggetto = "ANNULLAMENTO RICHIESTA intervento n. " + idxRichiesta.ToString();
string bodyTpl =
"ANNULLAMENTO RICHIESTA di intervento
" +
"Buongiorno " + rigaForn.nome + "
" +
"E' stata annullata l'assegnazione alla tua azienda di una richiesta di intervento da www.b2bcondomini.it.
" +
"Il condominio interessato era {0}.
" +
"La richiesta indicata era la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
string codAzione = "RemSupp";
eseguiAzione(oggetto, bodyTpl, codAzione, -9999, false, riga, true, false, true);
rigaForn = rigaFornitore(idxForn);
// STEP 2: scrivo al NUOVO fornitore... salvo nuova data scadenza...
DtProxy.man.taElRich.UpdateForn(idxRichiesta, idxArea, idxForn);
oggetto = "NUOVA RICHIESTA intervento n. " + idxRichiesta.ToString();
bodyTpl =
"ASSEGNAZIONE INTERVENTO
" +
"Buongiorno " + rigaForn.nome + "
" +
"Ti è stata assegnata una nuova richiesta di intervento da www.b2bcondomini.it.
" +
"Il condominio interessato è {0}, pregasi contattare {1} al numero {2}.
" +
"La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
codAzione = "SetSupp";
eseguiAzione(oggetto, bodyTpl, codAzione, -9999, true, riga, true, false, true);
}
}
}
///
/// Gestione azione MODIFICA MESSAGGIO
///
public void doUpdateMess(string messaggio)
{
// recupero dati della richiesta corrente
var riga = ER_curr;
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
string oggetto = "AGGIORNAMENTO MESSAGGIO intervento n. " + idxRichiesta.ToString();
string bodyTpl =
"AGGIORNAMENTO MESSAGGIO
" +
"Buongiorno " + rigaForn.nome + "
" +
"Il testo della richiesta di intervento è stato modificato, ora è:
" +
"" + messaggio + "
" +
"Il condominio interessato è {0}, pregasi contattare {1} al numero {2}.
La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
string codAzione = "MessMod";
DtProxy.man.taElRich.UpdateText(idxRichiesta, messaggio, riga.note);
eseguiAzione(oggetto, bodyTpl, codAzione, -9999, true, riga, true, false, false);
}
}
}
///
/// Gestione azione freeze/unfreeze
///
///
///
public void doSetFreeze(string codAzione, bool freezed)
{
// recupero dati della richiesta corrente
var riga = ER_curr;
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
string stato = freezed ? "CONGELAMENTO" : "SCONGELAMENTO";
if (rigaForn != null)
{
string oggetto = stato + " intervento n. " + idxRichiesta.ToString();
string bodyTpl =
"" + stato + " intervento
" +
"Buongiorno " + rigaForn.nome + "
" +
"E' stato modificato lo stato (congelato/scongelato) per l'intervento in oggetto:
" +
"Il condominio interessato è {0}, pregasi contattare {1} al numero {2}.
La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
DtProxy.man.taElRich.UpdateFreezed(idxRichiesta, freezed);
eseguiAzione(oggetto, bodyTpl, codAzione, -9999, true, riga, true, false, true);
}
}
}
///
/// Gestione azione AGGIUNTA NOTE
///
///
///
///
///
///
public void doAddNote(string codAzione, string note, bool notifyPAZ, bool notifyPAM, bool notifyPBO)
{
// recupero dati della richiesta corrente
var riga = ER_curr;
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
string oggetto = "AGGIORNAMENTO NOTE intervento n. " + idxRichiesta.ToString();
string bodyTpl =
"AGGIORNAMENTO NOTE
" +
"Buongiorno " + rigaForn.nome + "
" +
"E' stata aggiunta la seguente nota per l'intervento in oggetto:
" +
"" + note + "
" +
"Il condominio interessato è {0}, pregasi contattare {1} al numero {2}.
La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
DtProxy.man.taElRich.UpdateText(idxRichiesta, riga.messaggio, riga.note + "
" + note);
eseguiAzione(oggetto, bodyTpl, codAzione, -9999, true, riga, notifyPAZ, notifyPAM, notifyPBO);
}
}
}
///
/// Registra TASK da parte dell'amministratore
///
///
/// stato di destinazione richiesto
/// idxRichiesta
public void doCreateNewRich(string codAzione, int idxStato, int idxRich, bool doRedirect)
{
// recupero dati della richiesta SPECIFICATA
var riga = ER_spec(idxRich);
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
// STEP 1: recupero descrizioni azione e stato...
string azione = DtProxy.man.taAAct.getByKey(codAzione)[0].descrAzione;
string stato = DtProxy.man.taAS.getByKey(idxStato)[0].descrizione;
string oggetto = "NUOVA RICHIESTA intervento n." + idxRich.ToString() + " da www.b2bcondomini.it";
string bodyTpl =
"NUOVA RICHIESTA INTERVENTO
" +
"Buongiorno
" +
"Ti è stata assegnata una nuova richiesta di intervento da www.b2bcondomini.it.
" +
"Il condominio interessato è {0}, pregasi contattare {1} al numero {2}.
" +
"La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
eseguiAzioneIdxRich(idxRich, oggetto, bodyTpl, codAzione, idxStato, doRedirect, true, false, true);
}
}
}
///
/// Registra ANNULLAMENTO da parte dell'amministratore
///
///
/// stato di destinazione richiesto
/// idxRichiesta
public void doNullRich(string codAzione, int idxStato, int idxRich)
{
// recupero dati della richiesta SPECIFICATA
var riga = ER_spec(idxRich);
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
// STEP 1: recupero descrizioni azione e stato...
string azione = DtProxy.man.taAAct.getByKey(codAzione)[0].descrAzione;
string stato = DtProxy.man.taAS.getByKey(idxStato)[0].descrizione;
string oggetto = "ANNULLAMENTO RICHIESTA n. " + idxRich.ToString() + " da www.b2bcondomini.it";
string bodyTpl =
"ANNULLAMENTO RICHIESTA INTERVENTO
" +
"Buongiorno
" +
"La richiesta di intervento da www.b2bcondomini.it è stata annullata.
" +
"Seguire il link seguente per maggiori informazioni.";
eseguiAzioneIdxRich(idxRich, oggetto, bodyTpl, codAzione, idxStato, true, true, false, true);
}
}
}
///
/// Registra TASK da parte del fornitore
///
///
/// stato di destinazione richiesto
/// stato di destinazione richiesto
/// stato di destinazione richiesto
/// stato di destinazione richiesto
public void doFornTask(string codAzione, int idxStato, bool notifyPAZ, bool notifyPAM, bool notifyPBO)
{
var riga = ER_curr;
if (riga != null)
{
// recupero fornitore...
var rigaForn = rigaFornitore(riga.idxFornitore);
if (rigaForn != null)
{
// STEP 1: recupero descrizioni azione e stato...
string azione = DtProxy.man.taAAct.getByKey(codAzione)[0].descrAzione;
string stato = DtProxy.man.taAS.getByKey(idxStato)[0].descrizione;
string oggetto = "AGGIORNAMENTO intervento n. " + idxRichiesta.ToString();
string bodyTpl =
"AGGIORNAMENTO intervento
" +
"Buongiorno " + rigaForn.nome + "
" +
"La presente per registrare l'azione di " + azione + ".
" +
"Lo stato attuale dell'intervento ora è quindi " + stato + ".
" +
"Il condominio interessato è {0}, referente {1} al numero {2}.
La richiesta indicata è la seguente:
{3}
" +
"Seguire il link seguente per maggiori informazioni.";
eseguiAzione(oggetto, bodyTpl, codAzione, idxStato, true, riga, notifyPAZ, notifyPAM, notifyPBO);
}
}
}
#endregion
}
}