inserimento controllo licenza utente in SMART

This commit is contained in:
Samuele Locatelli
2021-10-19 18:55:23 +02:00
parent deb0e472f1
commit b81cb2f536
4 changed files with 326 additions and 267 deletions
+60 -60
View File
@@ -1,66 +1,66 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="mod_commAttivita.ascx.cs" Inherits="GPW.WebUserControls.mod_commAttivita" %>
<div class="row mt-2 small py-2">
<div class="col-4 pr-0">
<asp:TextBox runat="server" ID="txtData" TextMode="Date" OnTextChanged="txtData_TextChanged" Width="9em" AutoPostBack="true" />
</div>
<div class="col-4 px-1">
<asp:LinkButton runat="server" ID="lnkCreateNew" OnClick="lnkCreateNew_Click" CssClass="btn btn-sm btn-success btn-block py-0"><i class="fa fa-plus" aria-hidden="true"></i> Aggiungi</asp:LinkButton>
</div>
<div class="col-4 pl-0 text-right">
<div class="border border-dark rounded text-center ">
<asp:Label runat="server" ID="lblTotOreRA" Text="..." CssClass="text-info font-weight-bold"
ToolTip="Ore caricate a commessa / ore lavorate da timbrature" />
<div class="col-4 pr-0">
<asp:TextBox runat="server" ID="txtData" TextMode="Date" OnTextChanged="txtData_TextChanged" Width="9em" AutoPostBack="true" />
</div>
<div class="col-4 px-1">
<asp:LinkButton runat="server" ID="lnkCreateNew" OnClick="lnkCreateNew_Click" CssClass="btn btn-sm btn-success btn-block py-0"><i class="fa fa-plus" aria-hidden="true"></i> Aggiungi</asp:LinkButton>
</div>
<div class="col-4 pl-0 text-right">
<div class="border border-dark rounded text-center ">
<asp:Label runat="server" ID="lblTotOreRA" Text="..." CssClass="text-info font-weight-bold"
ToolTip="Ore caricate a commessa / ore lavorate da timbrature" />
</div>
</div>
</div>
</div>
<div class="row mb-5">
<div class="col">
<asp:GridView ID="grView" runat="server" AllowPaging="false" AutoGenerateColumns="false" DataSourceID="odsRegAtt" ShowHeader="false" ShowFooter="false" CssClass="table table-sm table-striped" GridLines="none">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" ID="lnkEdit" OnClick="lnkEdit_Click" CommandArgument='<%# Eval("idxRA") %>'>
<div class="row">
<div class="col-4">
<asp:Label ID="lblCli" runat="server" Text='<%# cliByIdxFase(Eval("idxFase")) %>' CssClass="text-dark font-weight-bold" />
</div>
<div class="col-8 text-right small">
<asp:Label ID="lblPrj" runat="server" Text='<%# prjByIdxFase(Eval("idxFase")) %>' CssClass="text-dark" />
</div>
</div>
<div class="row small">
<div class="col-8 pr-0">
<asp:Label ID="lblFase" runat="server" Text='<%# faseByIdx(Eval("idxFase")) %>' CssClass="text-success font-weight-bold small" />
</div>
<div class="col-4 small text-right">
<div class="border border-dark rounded text-center">
<asp:Label ID="inizioLabel" runat="server" Text='<%# Eval("inizio","{0:HH:mm}") %>' CssClass="text-dark" />&nbsp;-&nbsp;<asp:Label ID="fineLabel" runat="server" Text='<%# Eval("fine","{0:HH:mm}") %>' CssClass="text-dark" />
</div>
</div>
</div>
<div class="row small">
<div class="col small">
<asp:Label ID="descrizioneLabel" CssClass="text-dark" runat="server" Text='<%# Eval("descrizione") %>' />
</div>
</div>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" ID="lnkClona" OnClick="lnkClona_Click" CommandArgument='<%# Eval("idxRA") %>' CssClass="btn btn-warning py-3 px-1"><i class="fa fa-magic" aria-hidden="true"></i></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="odsRegAtt" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="getByDipData"
TypeName="GPW_data.DS_ApplicazioneTableAdapters.RegAttivitaTableAdapter">
<SelectParameters>
<asp:SessionParameter DefaultValue="1" Name="idxDipendente" SessionField="idxDipendente" Type="Int32" />
<asp:SessionParameter Name="dataFrom" SessionField="dataFromRA" Type="DateTime" />
<asp:SessionParameter Name="dataTo" SessionField="dataToRA" Type="DateTime" />
</SelectParameters>
</asp:ObjectDataSource>
</div>
</div>
<div class="col">
<asp:GridView ID="grView" runat="server" AllowPaging="false" AutoGenerateColumns="false" DataSourceID="odsRegAtt" ShowHeader="false" ShowFooter="false" CssClass="table table-sm table-striped" GridLines="none">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" ID="lnkEdit" OnClick="lnkEdit_Click" CommandArgument='<%# Eval("idxRA") %>' Enabled='<%# userEnabled %>'>
<div class="row">
<div class="col-4">
<asp:Label ID="lblCli" runat="server" Text='<%# cliByIdxFase(Eval("idxFase")) %>' CssClass="text-dark font-weight-bold" />
</div>
<div class="col-8 text-right small">
<asp:Label ID="lblPrj" runat="server" Text='<%# prjByIdxFase(Eval("idxFase")) %>' CssClass="text-dark" />
</div>
</div>
<div class="row small">
<div class="col-8 pr-0">
<asp:Label ID="lblFase" runat="server" Text='<%# faseByIdx(Eval("idxFase")) %>' CssClass="text-success font-weight-bold small" />
</div>
<div class="col-4 small text-right">
<div class="border border-dark rounded text-center">
<asp:Label ID="inizioLabel" runat="server" Text='<%# Eval("inizio","{0:HH:mm}") %>' CssClass="text-dark" />&nbsp;-&nbsp;<asp:Label ID="fineLabel" runat="server" Text='<%# Eval("fine","{0:HH:mm}") %>' CssClass="text-dark" />
</div>
</div>
</div>
<div class="row small">
<div class="col small">
<asp:Label ID="descrizioneLabel" CssClass="text-dark" runat="server" Text='<%# Eval("descrizione") %>' />
</div>
</div>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" ID="lnkClona" OnClick="lnkClona_Click" CommandArgument='<%# Eval("idxRA") %>' CssClass="btn btn-warning py-3 px-1"><i class="fa fa-magic" aria-hidden="true"></i></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="odsRegAtt" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="getByDipData"
TypeName="GPW_data.DS_ApplicazioneTableAdapters.RegAttivitaTableAdapter">
<SelectParameters>
<asp:SessionParameter DefaultValue="1" Name="idxDipendente" SessionField="idxDipendente" Type="Int32" />
<asp:SessionParameter Name="dataFrom" SessionField="dataFromRA" Type="DateTime" />
<asp:SessionParameter Name="dataTo" SessionField="dataToRA" Type="DateTime" />
</SelectParameters>
</asp:ObjectDataSource>
</div>
</div>
+208 -164
View File
@@ -9,42 +9,70 @@ namespace GPW.WebUserControls
{
public partial class mod_commAttivita : System.Web.UI.UserControl
{
#region Protected Properties
/// <summary>
/// Hash di base x ricerca CLIENTE da idxFase
/// </summary>
protected string rhCliByIF { get; set; }
/// <summary>
/// Hash di base x ricerca PROGETTO da idxFase
/// </summary>
protected string rhProjByIF { get; set; }
/// <summary>
/// Hash di base x ricerca IdxProgetto da idxFase
/// </summary>
protected string rhIPByIF { get; set; }
/// <summary>
/// Hash di base x ricerca FASE da idxFase
/// </summary>
protected string rhFaseByIF { get; set; }
/// <summary>
/// Hash di base x ricerca IdxProgetto da idxFase
/// </summary>
protected string rhIPByIF { get; set; }
/// <summary>
/// Hash di base x ricerca PROGETTO da idxFase
/// </summary>
protected string rhProjByIF { get; set; }
protected void Page_Load(object sender, EventArgs e)
protected bool userEnabled
{
if (!Page.IsPostBack)
{
// controllo se ho una data selezionata da URL
if (!string.IsNullOrEmpty(memLayer.ML.QSS("dataRif")))
{
dataRif = memLayer.ML.QSD("dataRif");
}
setupPage();
}
rhCliByIF = memLayer.ML.redHash("cliByIdxFase:");
rhIPByIF = memLayer.ML.redHash("idxProjByIdxFase:");
rhProjByIF = memLayer.ML.redHash("projByIdxFase:");
rhFaseByIF = memLayer.ML.redHash("faseByIdxFase:");
grView.DataBind();
get => (DataProxy.currDipIsActive && DataProxy.currDipHasPayloadActive);
}
#endregion Protected Properties
#region Public Properties
/// <summary>
/// data riferimento (selezionata) da session
/// </summary>
public DateTime dataRif
{
get
{
DateTime answ = DateTime.Now;
// cerco in session...
if (memLayer.ML.isInSessionObject("dataRif"))
{
try
{
answ = Convert.ToDateTime(memLayer.ML.objSessionObj("dataRif"));
}
catch
{ }
}
// altrimenti cerco in URL e salvo in session...
else if (!string.IsNullOrEmpty(memLayer.ML.QSS("dataRif")))
{
answ = memLayer.ML.QSD("dataRif");
dataRif = answ;
}
// restituisco!
return answ;
}
set
{
memLayer.ML.setSessionVal("dataRif", value);
}
}
/// <summary>
/// pagina di return a fine editing
/// </summary>
@@ -67,39 +95,66 @@ namespace GPW.WebUserControls
}
}
/// <summary>
/// data riferimento (selezionata) da session
/// </summary>
public DateTime dataRif
{
get
{
DateTime answ = DateTime.Now;
// cerco in session...
if (memLayer.ML.isInSessionObject("dataRif"))
{
try
{
#endregion Public Properties
answ = Convert.ToDateTime(memLayer.ML.objSessionObj("dataRif"));
}
catch
{ }
}
// altrimenti cerco in URL e salvo in session...
else if (!string.IsNullOrEmpty(memLayer.ML.QSS("dataRif")))
{
answ = memLayer.ML.QSD("dataRif");
dataRif = answ;
}
// restituisco!
return answ;
}
set
#region Private Methods
/// <summary>
/// Cerca dati cliente da idxFase su DB
/// </summary>
/// <param name="idxFase"></param>
/// <returns></returns>
private string getCliByDb(int idxFase)
{
string answ = "";
try
{
memLayer.ML.setSessionVal("dataRif", value);
int idxPrj = idxProjByIdxFase(idxFase);
DS_Applicazione.AnagProgettiRow progetto = DataProxy.DP.taAP.getByIdxProjSmart(idxPrj)[0];
answ = DataProxy.DP.taAnCli.getByIdx(progetto.idxCliente)[0].RagSociale;
}
catch
{ }
return answ;
}
/// <summary>
/// Cerca dati fase da idxFase su DB
/// </summary>
/// <param name="idxFase"></param>
/// <returns></returns>
private string getFaseByDb(int idxFase)
{
string answ = "";
try
{
DS_Applicazione.AnagFasiRow fase = DataProxy.DP.taAF.getByIdxSmart(idxFase)[0];
answ = string.Format("{0} <i>({1})</i>", fase.nomeFase, fase.descrizioneFase);
}
catch
{ }
return answ;
}
/// <summary>
/// Cerca dati progetto da idxFase su DB
/// </summary>
/// <param name="idxFase"></param>
/// <returns></returns>
private string getProjByDb(int idxFase)
{
string answ = "";
try
{
int idxPrj = idxProjByIdxFase(idxFase);
DS_Applicazione.AnagProgettiRow progetto = DataProxy.DP.taAP.getByIdxProjSmart(idxPrj)[0];
answ = progetto.nomeProj;
}
catch
{ }
return answ;
}
/// <summary>
/// imposta la pagina
/// </summary>
@@ -121,7 +176,14 @@ namespace GPW.WebUserControls
}
memLayer.ML.setSessionVal("dataFromRA", dataRif.Date);
memLayer.ML.setSessionVal("dataToRA", dataRif.AddDays(1).Date);
// controllo aggiunta da licenza
lnkCreateNew.Visible = userEnabled;
}
#endregion Private Methods
#region Protected Methods
/// <summary>
/// Cerca associazione idxProj <--> idxFase da cache o da Db
/// </summary>
@@ -145,6 +207,90 @@ namespace GPW.WebUserControls
return idxPrj;
}
/// <summary>
/// rimanda ad edit
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lnkClona_Click(object sender, EventArgs e)
{
if (userEnabled)
{
// salvo
LinkButton lbtn = (LinkButton)sender;
int idxRa = 0;
try
{
idxRa = Convert.ToInt32(lbtn.CommandArgument);
}
catch
{ }
// chiamo clona!
DataProxy.DP.taRA.clonaRecord(idxRa);
}
//update!
setupPage();
grView.DataBind();
}
protected void lnkCreateNew_Click(object sender, EventArgs e)
{
memLayer.ML.emptySessionVal("idxRASel");
if (userEnabled)
{
// redirect!
Response.Redirect("attivitaIns.aspx");
}
}
/// <summary>
/// rimanda ad edit
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lnkEdit_Click(object sender, EventArgs e)
{
// salvo
LinkButton lbtn = (LinkButton)sender;
if (userEnabled)
{
memLayer.ML.setSessionVal("idxRASel", lbtn.CommandArgument);
// redirect!
Response.Redirect("attivitaIns.aspx");
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// controllo se ho una data selezionata da URL
if (!string.IsNullOrEmpty(memLayer.ML.QSS("dataRif")))
{
dataRif = memLayer.ML.QSD("dataRif");
}
setupPage();
}
rhCliByIF = memLayer.ML.redHash("cliByIdxFase:");
rhIPByIF = memLayer.ML.redHash("idxProjByIdxFase:");
rhProjByIF = memLayer.ML.redHash("projByIdxFase:");
rhFaseByIF = memLayer.ML.redHash("faseByIdxFase:");
grView.DataBind();
}
protected void txtData_TextChanged(object sender, EventArgs e)
{
DateTime newData = DateTime.Today;
DateTime.TryParse(txtData.Text, out newData);
dataRif = newData;
setupPage();
grView.DataBind();
}
#endregion Protected Methods
#region Public Methods
/// <summary>
/// recupera cliente da idxFase
/// </summary>
@@ -163,61 +309,6 @@ namespace GPW.WebUserControls
}
return answ;
}
/// <summary>
/// Cerca dati cliente da idxFase su DB
/// </summary>
/// <param name="idxFase"></param>
/// <returns></returns>
private string getCliByDb(int idxFase)
{
string answ = "";
try
{
int idxPrj = idxProjByIdxFase(idxFase);
DS_Applicazione.AnagProgettiRow progetto = DataProxy.DP.taAP.getByIdxProjSmart(idxPrj)[0];
answ = DataProxy.DP.taAnCli.getByIdx(progetto.idxCliente)[0].RagSociale;
}
catch
{ }
return answ;
}
/// <summary>
/// recupera progetto da idxFase
/// </summary>
/// <param name="idxFase"></param>
/// <returns></returns>
public string prjByIdxFase(object _idxFase)
{
string answ = "";
int idxFase = 0;
int.TryParse(_idxFase.ToString(), out idxFase);
answ = memLayer.ML.getRSV($"{rhProjByIF}{idxFase}");
if (string.IsNullOrEmpty(answ))
{
answ = getProjByDb(idxFase);
memLayer.ML.setRSV($"{rhProjByIF}{idxFase}", answ, memLayer.ML.CRI("shotTimeCache"));
}
return answ;
}
/// <summary>
/// Cerca dati progetto da idxFase su DB
/// </summary>
/// <param name="idxFase"></param>
/// <returns></returns>
private string getProjByDb(int idxFase)
{
string answ = "";
try
{
int idxPrj = idxProjByIdxFase(idxFase);
DS_Applicazione.AnagProgettiRow progetto = DataProxy.DP.taAP.getByIdxProjSmart(idxPrj)[0];
answ = progetto.nomeProj;
}
catch
{ }
return answ;
}
/// <summary>
/// recupera descrizione e nome fase da idxFase
@@ -237,73 +328,26 @@ namespace GPW.WebUserControls
}
return answ;
}
/// <summary>
/// Cerca dati fase da idxFase su DB
/// recupera progetto da idxFase
/// </summary>
/// <param name="idxFase"></param>
/// <returns></returns>
private string getFaseByDb(int idxFase)
public string prjByIdxFase(object _idxFase)
{
string answ = "";
try
int idxFase = 0;
int.TryParse(_idxFase.ToString(), out idxFase);
answ = memLayer.ML.getRSV($"{rhProjByIF}{idxFase}");
if (string.IsNullOrEmpty(answ))
{
DS_Applicazione.AnagFasiRow fase = DataProxy.DP.taAF.getByIdxSmart(idxFase)[0];
answ = string.Format("{0} <i>({1})</i>", fase.nomeFase, fase.descrizioneFase);
answ = getProjByDb(idxFase);
memLayer.ML.setRSV($"{rhProjByIF}{idxFase}", answ, memLayer.ML.CRI("shotTimeCache"));
}
catch
{ }
return answ;
}
/// <summary>
/// rimanda ad edit
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lnkEdit_Click(object sender, EventArgs e)
{
// salvo
LinkButton lbtn = (LinkButton)sender;
memLayer.ML.setSessionVal("idxRASel", lbtn.CommandArgument);
// redirect!
Response.Redirect("attivitaIns.aspx");
}
/// <summary>
/// rimanda ad edit
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lnkClona_Click(object sender, EventArgs e)
{
// salvo
LinkButton lbtn = (LinkButton)sender;
int idxRa = 0;
try
{
idxRa = Convert.ToInt32(lbtn.CommandArgument);
}
catch
{ }
// chiamo clona!
DataProxy.DP.taRA.clonaRecord(idxRa);
//update!
setupPage();
grView.DataBind();
}
protected void lnkCreateNew_Click(object sender, EventArgs e)
{
memLayer.ML.emptySessionVal("idxRASel");
// redirect!
Response.Redirect("attivitaIns.aspx");
}
protected void txtData_TextChanged(object sender, EventArgs e)
{
DateTime newData = DateTime.Today;
DateTime.TryParse(txtData.Text, out newData);
dataRif = newData;
setupPage();
grView.DataBind();
}
#endregion Public Methods
}
}
+31 -29
View File
@@ -1,59 +1,61 @@
//------------------------------------------------------------------------------
// <generato automaticamente>
// Codice generato da uno strumento.
// <auto-generated>
// This code was generated by a tool.
//
// Le modifiche a questo file possono causare un comportamento non corretto e verranno perse se
// il codice viene rigenerato.
// </generato automaticamente>
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace GPW.WebUserControls {
public partial class mod_commAttivita {
namespace GPW.WebUserControls
{
public partial class mod_commAttivita
{
/// <summary>
/// Controllo txtData.
/// txtData control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtData;
/// <summary>
/// Controllo lnkCreateNew.
/// lnkCreateNew control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.LinkButton lnkCreateNew;
/// <summary>
/// Controllo lblTotOreRA.
/// lblTotOreRA control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Label lblTotOreRA;
/// <summary>
/// Controllo grView.
/// grView control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.GridView grView;
/// <summary>
/// Controllo odsRegAtt.
/// odsRegAtt control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.ObjectDataSource odsRegAtt;
}
@@ -23,6 +23,11 @@ namespace GPW.WebUserControls
}
}
protected bool userEnabled
{
get => (DataProxy.currDipIsActive && DataProxy.currDipHasPayloadActive);
}
#endregion Protected Properties
#region Private Methods
@@ -91,34 +96,42 @@ namespace GPW.WebUserControls
/// </summary>
private void setButtons()
{
// controllo SE voglio inibire i buttons...
if (forceButtons)
// se utente ok...
if (userEnabled)
{
// controllo se il prox comando DOVREBBE essere entrata o uscita
bool nextIsEntrata = true;
// controllo dipendente
if (IdxDipendente > 0)
// controllo SE voglio inibire i buttons...
if (forceButtons)
{
// ricavo ultima timbratura..
nextIsEntrata = timbratrice.nextIsEntrata(IdxDipendente);
// di conseguenza cambio abilitazione ad un buttons
if (nextIsEntrata)
// controllo se il prox comando DOVREBBE essere entrata o uscita
bool nextIsEntrata = true;
// controllo dipendente
if (IdxDipendente > 0)
{
fixBtnInOut(true, false);
// ricavo ultima timbratura..
nextIsEntrata = timbratrice.nextIsEntrata(IdxDipendente);
// di conseguenza cambio abilitazione ad un buttons
if (nextIsEntrata)
{
fixBtnInOut(true, false);
}
else
{
fixBtnInOut(false, true);
}
}
else
{
fixBtnInOut(false, true);
fixBtnInOut(false, false);
}
}
else
{
fixBtnInOut(false, false);
fixBtnInOut(true, true);
}
}
else
{
fixBtnInOut(true, true);
fixBtnInOut(false, false);
}
}