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 } }