minor update

Aggiunta di una TermClass.cs in versione embrionale

git-svn-id: https://keyhammer.ath.cx/svn/GMW/trunk@151 365432ac-a1b5-4ffd-bb28-6d3099d32164
This commit is contained in:
samuele
2010-07-20 16:23:49 +00:00
parent 027e3f5c72
commit f7c32af36a
10 changed files with 870 additions and 1 deletions
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -82,6 +82,7 @@
<Compile Include="reportExporter.cs" />
<Compile Include="reportPrinter.cs" />
<Compile Include="selData.cs" />
<Compile Include="TermClass.cs" />
<Compile Include="Type\ArtInProd.cs" />
<Compile Include="Type\Bilancia.cs" />
<Compile Include="Type\BlockMap.cs" />
-1
View File
@@ -14,7 +14,6 @@ namespace GMW_data
#region area table adapters
// variabile di tipo table adapter
public DS_magazzinoTableAdapters.AnagMagTableAdapter taAnagMag;
public DS_magazzinoTableAdapters.BlocchiTableAdapter taBlocchi;
public DS_magazzinoTableAdapters.CelleTableAdapter taCelle;
+869
View File
@@ -0,0 +1,869 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SteamWare;
namespace GMW_data
{
/// <summary>
/// classe gestione operazioni con terminalino
/// </summary>
public class TermClass
{
#region area table adapters
// variabile di tipo table adapter
#if false
public DS_magazzinoTableAdapters.AnagMagTableAdapter taAnagMag;
public DS_magazzinoTableAdapters.BlocchiTableAdapter taBlocchi;
public DS_magazzinoTableAdapters.CelleTableAdapter taCelle;
public DS_magazzinoTableAdapters.TipoCellaTableAdapter taTipoCella;
public DS_magazzinoTableAdapters.ElencoCartelliniTableAdapter taCartellini;
public DS_magazzinoTableAdapters.PosizioneUdcCorrenteTableAdapter taPosUdcCorr;
public DS_magazzinoTableAdapters.PosizioneUdcStoricoTableAdapter taPosUdcStorico;
public DS_magazzinoTableAdapters.V_MagazziniOverviewTableAdapter taMagOverw;
public DS_magazzinoTableAdapters.V_DettMagPartTableAdapter taDettMagPart;
public DS_magazzinoTableAdapters.v_UdcDetailTableAdapter taDettUDC;
public DS_magazzinoTableAdapters.ElencoListePrelievoTableAdapter taElencoListePrelievo;
public DS_magazzinoTableAdapters.ElencoCartelliniTableAdapter taElencoCartellini;
public DS_magazzinoTableAdapters.RigheListePrelievoTableAdapter taRigheListePrelievo;
public DS_magazzinoTableAdapters.TipoListaPrelievoTableAdapter taTipoListaPrelievo;
public DS_magazzinoTableAdapters.V_ParticolariOverviewTableAdapter taVParticolariOverwiew;
public DS_magazzinoTableAdapters.v_particolariEsponenteFiguraTableAdapter taPartExpFig;
#endif
/// <summary>
/// init dei table adapters
/// </summary>
protected void initTA()
{
// istanzio oggetto
#if false
taAnagMag = new GMW_data.DS_magazzinoTableAdapters.AnagMagTableAdapter();
taBlocchi = new GMW_data.DS_magazzinoTableAdapters.BlocchiTableAdapter();
taCelle = new GMW_data.DS_magazzinoTableAdapters.CelleTableAdapter();
taTipoCella = new GMW_data.DS_magazzinoTableAdapters.TipoCellaTableAdapter();
taCartellini = new GMW_data.DS_magazzinoTableAdapters.ElencoCartelliniTableAdapter();
taPosUdcCorr = new GMW_data.DS_magazzinoTableAdapters.PosizioneUdcCorrenteTableAdapter();
taPosUdcStorico = new GMW_data.DS_magazzinoTableAdapters.PosizioneUdcStoricoTableAdapter();
taMagOverw = new GMW_data.DS_magazzinoTableAdapters.V_MagazziniOverviewTableAdapter();
taDettMagPart = new GMW_data.DS_magazzinoTableAdapters.V_DettMagPartTableAdapter();
taDettUDC = new GMW_data.DS_magazzinoTableAdapters.v_UdcDetailTableAdapter();
taElencoListePrelievo = new GMW_data.DS_magazzinoTableAdapters.ElencoListePrelievoTableAdapter();
taElencoCartellini = new GMW_data.DS_magazzinoTableAdapters.ElencoCartelliniTableAdapter();
taRigheListePrelievo = new GMW_data.DS_magazzinoTableAdapters.RigheListePrelievoTableAdapter();
taTipoListaPrelievo = new GMW_data.DS_magazzinoTableAdapters.TipoListaPrelievoTableAdapter();
taVParticolariOverwiew = new GMW_data.DS_magazzinoTableAdapters.V_ParticolariOverviewTableAdapter();
taPartExpFig = new GMW_data.DS_magazzinoTableAdapters.v_particolariEsponenteFiguraTableAdapter();
#endif
}
/// <summary>
/// effettua setup dei connection strings da web.config delal singola applicazione
/// </summary>
protected virtual void setupConnectionStringBase()
{
// connections del db
#if false
taAnagMag.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taBlocchi.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taCelle.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taTipoCella.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taCartellini.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taPosUdcCorr.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taPosUdcStorico.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taMagOverw.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taDettMagPart.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taDettUDC.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taElencoListePrelievo.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taElencoCartellini.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taRigheListePrelievo.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taTipoListaPrelievo.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taVParticolariOverwiew.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
taPartExpFig.Connection.ConnectionString = memLayer.ML.confReadString("GMWConnectionString");
#endif
}
#endregion
#region Inizializzazione
protected TermClass()
{
initTA();
setupConnectionStringBase();
}
/// <summary>
/// oggetto static per fare chiamate sul magazzino
/// </summary>
public static TermClass termin = new TermClass();
#endregion
#region metodi protected
#if false
/// <summary>
/// aggiunge le righe liste di prelievo necessarie a soddisfare la richiesta in logica FIFO dato un elenco di cartellini, la qta totale da allocare e la lista attuale
/// </summary>
/// <param name="QtaTot"></param>
/// <param name="codListaAttuale"></param>
/// <param name="tabellaElencoCartellini"></param>
private void allocaRigheListaPrelievo(decimal QtaTot, string codListaAttuale, DS_magazzino.ElencoCartelliniDataTable tabellaElencoCartellini)
{
//ricavo il valore UDC della riga del più vecchio
string udcAttuale;
bool qtaOk = false;
bool dataFinished = false;
int progrUdc = 0;
int numUdcDisponibili = tabellaElencoCartellini.Rows.Count;
// contiene la quantità della riga attuale
decimal qtaRiga;
// somma progressiva della qta allocata - calcolo da db!
decimal qtaAllocata = taElencoListePrelievo.getByCodLista(codListaAttuale)[0].Prelevato;
//ciclo WHILE per lo riempimento FIFO con UDC secondo richiesta a partire da elenco fornito
while (!qtaOk && !dataFinished)
{
/*
* crea una riga in righelistaprelievo passando come valori
* il codlista attuale ricavato da sopr
* l'UDC dal primo della tabella getOlderUDC
*
*
* recupero quantità dalla riga corrente;
*
* imposto proposto a 1;
* imposto prelevato 0;
* taRighelistePreliveo.Insert;
*
* qtaAllocata = qtaAllocata + Qta di questa riga (riuso il valore della colonna QTA
* tabella[contatore]; contatore++;
* qtaOk = (qtaAllocata >= qtaRichiesta)
* dataFinished = (contatore >= numRighe);
*
* */
// ricavo la riga più vecchia
qtaRiga = tabellaElencoCartellini[progrUdc].Qta;
udcAttuale = tabellaElencoCartellini[progrUdc].UDC;
// eseguo query di insert
taRigheListePrelievo.Insert(codListaAttuale, udcAttuale, qtaRiga, true, false);
//incremento qta allocata
qtaAllocata = (qtaAllocata + qtaRiga);
//incremento contatore
progrUdc++;
// verifico le condizioni, false se non cambia nulla true se cambia e si esce dal while
qtaOk = (qtaAllocata >= QtaTot);
dataFinished = (progrUdc >= numUdcDisponibili);
}
}
#endif
#endregion
#region Metodi esposti
#if false
/// <summary>
/// effettua lo spostamento di un UDC tra 2 posizioni indicate
/// </summary>
/// <param name="CodCS">Codice company/sito</param>
/// <param name="UDC">Codice UDC</param>
/// <param name="IdxCellaFrom">Cella di origine</param>
/// <param name="IdxCellaTo">Cella di destinazione</param>
/// <returns>esito comando</returns>
public bool spostaUDC(string CodCS, string UDC, int IdxCellaFrom, int IdxCellaTo)
{
bool answ = false;
try
{
taPosUdcCorr.stp_spostaUdc(CodCS, UDC, IdxCellaFrom, IdxCellaTo);
// cerco nuova posizione...
if (taPosUdcCorr.getByCellaUdc(UDC, IdxCellaTo).Rows.Count > 0)
{
answ = true;
}
}
catch
{ }
return answ;
}
/// <summary>
/// effettua lo scaricamento di un UDC (x spedizione)
/// </summary>
/// <param name="CodCS">Codice company/sito</param>
/// <param name="UDC">Codice UDC</param>
/// <param name="IdxCellaFrom">Cella di origine</param>
/// <param name="IdxPosizUdc">Codice posizione UDC finale</param>
/// <returns>esito comando</returns>
public bool scaricaUDC(string CodCS, string UDC, int IdxCellaFrom, int IdxPosizUdc)
{
bool answ = false;
try
{
taPosUdcCorr.stp_scaricaUdc(CodCS, UDC, IdxCellaFrom, IdxPosizUdc);
answ = true;
}
catch
{ }
return answ;
}
/// <summary>
/// rettifica la qta di un UDC
/// </summary>
/// <param name="CodSoggetto">Codice soggetto/operatore</param>
/// <param name="UDC">Codice UDC</param>
/// <param name="qta">Nuova quantita associata</param>
/// <returns>esito comando</returns>
public bool rettificaQtaUDC(string CodSoggetto, string UDC, decimal qta)
{
bool answ = false;
try
{
int fatti = 0;
fatti = taCartellini.updateQty(UDC, CodSoggetto, "U", "UDC_QTY", qta).Rows.Count;
if (fatti > 0)
{
answ = true;
}
}
catch
{ }
return answ;
}
/// <summary>
/// Crea una lista di prelievo andando a prenotare gli UDC del particolare richiesto in logica FIFO
/// </summary>
/// <param name="CodCS"></param>
/// <param name="TipoListaPrelievo"></param>
/// <param name="Particolare"></param>
/// <param name="Esponente"></param>
/// <param name="Figura"></param>
/// <param name="QtaTot"></param>
/// <param name="CodImballo"></param>
/// <returns></returns>
public string creaListaPrelievo(string CodCS, string TipoListaPrelievo, string Particolare, string Esponente, string Figura, decimal QtaTot, string CodImballo)
{
/*
* - ordini gli UDC per data dal + vecchio (data fusione? direi di si!)
*
* - prenda 1 ad 1 gli UDC, e crei dall'UDC un record in RigheListePrelievo con
* - CodLista (dal record appena generato)
* - UDC (il + vecchio trovato)
* - QTA (dell'UDC)
* - Proposto = 1 (vero)
* - Prelevato = 0 (falso)
* - questo loop di prelievo va eseguito fino a quanto la somam delle qty sia maggiore o uguale alla qty richiesta, o fino a quando siano finiti gli UDC
*
* - potrebbe esser cambiato approccio e si potrebbe fare una query ceh seleziona i + vecchi UDC in numero corretto fin dall'inizio da includere facendo una cosa del tipo
* - calcolo media qty degli UDC papabili x le condizioni dette prima
* - dato il totale ottengo quanti UDC mi servono arrotondando x eccesso (se ho 200 richiesti, media 70, CEIL(200/70) = 3)
* - faccio un SELECT TOP n (qui 3) * FROM ElencoCartellini WHERE ...
* - e questa select la uso x farci un INSERT INTO in RigheListePrelievo
*
* - terminati questi step si aggiorna la lista di prelievo emttendo come qty quella data dalla somma degli UDC davvero proposti
*
* - la stored deve restituire il codice della lista di prelievo e passarla qui, che a sua volta passerà al chiamante il codice della lista
* */
string answ = "K";
// variabile di tipo datetime per data corrente
DateTime adesso = DateTime.Now;
// dati che mi servono...
int idxPosizione = 20; // !!! Verificare parametrico - me lo faccio passare... // !!!FARE!!!
// non la valorizzo qui ma calcolo ... se non fa verificare
string RagioneSociale = "";
// ricavo da session...
string codSoggetto = "";
try
{
codSoggetto = DataProxy.obj.taSogg2Oper.getBuUserDominio(user_std.UtSn.utente, user_std.UtSn.dominio)[0].CodSoggetto;
}
catch (Exception e)
{
logger.lg.scriviLog(string.Format("Non sono riuscito a recuperare il codice soggetto per l'utente loggato: {0}", user_std.UtSn.userNameAD), tipoLog.ERROR);
}
// proseguo SOLO se ho trovato cod soggetto...
if (codSoggetto != "")
{
// li ricavo da db successivamente
string disegnoGrezzo = "";
string descParticolare = "";
string codCliente = "";
// ricavo codCliente
try
{
codCliente = DataProxy.obj.taAnagParticolari.getByParticolare(Particolare)[0].CodCliente;
}
catch { }
// ricavo disegnoGrezzo
try
{
disegnoGrezzo = DataProxy.obj.taAnagParticolari.getByParticolare(Particolare)[0].DisegnoGrezzo;
}
catch { }
try
{
descParticolare = DataProxy.obj.taAnagParticolari.getByParticolare(Particolare)[0].DescParticolare;
}
catch { }
// dato codcliente ricavo la ragione sociale
try
{
RagioneSociale = DataProxy.obj.taAnagClienti.getRagioneSocialeByCodCliente(codCliente)[0].RagSociale;
}
catch { }
string codListaAttuale = "";
try
{
// eseguo soltanto la query (meglio con try catch così se non c'è non dà errore...)
DS_magazzino.ElencoListePrelievoDataTable tabellaElencoListe = taElencoListePrelievo.InsertQuery(string.Format("{0:yy}", adesso), string.Format("{0:MM}", adesso), idxPosizione, memLayer.ML.confReadString("CodCS"), codCliente, RagioneSociale, codSoggetto, Particolare, descParticolare, disegnoGrezzo, Esponente, Figura, CodImballo, QtaTot);
// ricavo prima (e unica) riga dalla select
DS_magazzino.ElencoListePrelievoRow rigaElencoListe = tabellaElencoListe[0];
// ricavo valore del CodLista attuale appena inserito
codListaAttuale = rigaElencoListe.CodLista;
}
catch
{ }
if (codListaAttuale != "")
{
answ = codListaAttuale;
// stored per ricavare il più vecchio in ordine ASC per Data Fusione - TABELLA
//DS_magazzino.ElencoCartelliniDataTable tabellaElencoCartellini = taElencoCartellini.getOlderUDC(Esponente, Particolare, idxPosizione);
DS_magazzino.ElencoCartelliniDataTable tabellaElencoCartellini = taElencoCartellini.getUdcUnusedOlder(codListaAttuale);
allocaRigheListaPrelievo(QtaTot, codListaAttuale, tabellaElencoCartellini);
}
}
return answ;
}
/// <summary>
/// indica come attivata in carico di una lista di prelievo
/// </summary>
/// <param name="CodCS">Codice company/sito</param>
/// <param name="CodLista">codice della lista di prelievo</param>
/// <param name="CodSoggetto">cod operatore carrellista</param>
/// <returns></returns>
public esitoOperazione attivaListaPrelievo(string CodCS, string CodLista, string CodSoggetto)
{
// da chiamare quando clicco e inizio lista prelievo .... vedi sopra
esitoOperazione answ = esitoOperazione.errore;
try
{
// la query recupera la lista in base al CodLista
DS_magazzino.ElencoListePrelievoDataTable tabella = taElencoListePrelievo.getByCodLista(CodLista);
DS_magazzino.ElencoListePrelievoRow riga = tabella[0];
// se la lista esiste...
if (tabella.Rows.Count > 0)
{
// se la lista è ancora non completata
if (riga.CodStatoLista == (int)statoLista.bozza)
{
taElencoListePrelievo.updateStato(CodSoggetto, CodLista, (int)statoLista.generata);
answ = esitoOperazione.ok;
}
// se è già completata o iniziata dà errore
else
{
answ = esitoOperazione.errore_readOnly;
}
}
// se la lista non esiste dai errore
else
{
answ = esitoOperazione.errore;
}
}
catch
{ }
return answ;
}
/// <summary>
/// indica presa in carico di una lista di prelievo
/// </summary>
/// <param name="CodCS">Codice company/sito</param>
/// <param name="CodLista">codice della lista di prelievo</param>
/// <param name="CodSoggetto">cod operatore carrellista</param>
/// <returns></returns>
public esitoOperazione iniziaListaPrelievo(string CodCS, string CodLista, string CodSoggetto)
{
// da chiamare quando clicco e inizio lista prelievo .... vedi sopra
esitoOperazione answ = esitoOperazione.errore;
try
{
// la query recupera la lista in base al CodLista
DS_magazzino.ElencoListePrelievoDataTable tabella = taElencoListePrelievo.getByCodLista(CodLista);
DS_magazzino.ElencoListePrelievoRow riga = tabella[0];
// se la lista esiste...
if (tabella.Rows.Count > 0)
{
// se la lista è ancora non completata
if (riga.CodStatoLista == (int)statoLista.generata)
{
taElencoListePrelievo.updateStato(CodSoggetto, CodLista, (int)statoLista.iniziata);
answ = esitoOperazione.ok;
}
// se è già completata o iniziata dà errore
else
{
answ = esitoOperazione.errore_readOnly;
}
}
// se la lista non esiste dai errore
else
{
answ = esitoOperazione.errore;
}
}
catch
{ }
return answ;
}
/// <summary>
/// indica come completata (da aprte del magazziniere) una lista di prelievo
/// </summary>
/// <param name="CodCS">Codice company/sito</param>
/// <param name="CodLista">codice della lista di prelievo</param>
/// <param name="CodSoggetto">cod operatore carrellista</param>
/// <returns></returns>
public esitoOperazione completaListaPrelievo(string CodCS, string CodLista, string CodSoggetto)
{
// da chiamare quando clicco e inizio lista prelievo .... vedi sopra
esitoOperazione answ = esitoOperazione.errore;
try
{
// la query recupera la lista in base al CodLista
DS_magazzino.ElencoListePrelievoDataTable tabella = taElencoListePrelievo.getByCodLista(CodLista);
DS_magazzino.ElencoListePrelievoRow riga = tabella[0];
// se la lista esiste...
if (tabella.Rows.Count > 0)
{
// se la lista è ancora non completata
if (riga.CodStatoLista == (int)statoLista.iniziata)
{
// ricavo il codtipolista
string codTipoListaAttuale = riga.CodTipoLista;
//leggo da tipoLista prelievo alcuni dati (es codcella di destinazione)
DS_magazzino.TipoListaPrelievoDataTable tabellaTipoLista = taTipoListaPrelievo.getByCodTipoLista(codTipoListaAttuale);
DS_magazzino.TipoListaPrelievoRow rigaTipoLista = tabellaTipoLista[0];
// leggo da righe lista prelievo il dato udc che mi serve
DS_magazzino.RigheListePrelievoDataTable tabellaRigheListaPrelievo = taRigheListePrelievo.getByCodLista(CodLista);
DS_magazzino.RigheListePrelievoRow rigaListaPrelievo = tabellaRigheListaPrelievo[0];
// leggo il codice della cella...
string codCellaDestAttuale = rigaTipoLista.CodCella;
// lo trasformo x avere la cella di destinazione...
int idxCellaTo = taCelle.getByCodCella(codCellaDestAttuale)[0].IdxCella;
// sposto ("metto a terra") gli UDC
foreach (DS_magazzino.RigheListePrelievoRow row in tabellaRigheListaPrelievo.Rows)
{
// ricavo il codice UDC...
string UDC = row.UDC;
// mi serve per posizione udc corrente
DS_magazzino.PosizioneUdcCorrenteRow rigaUdcCorrente = taPosUdcCorr.getByUDC(UDC)[0];
// il secondo idx che mi serve
int idxCellaFrom = rigaUdcCorrente.IdxCella;
// sposto UDC
spostaUDC(CodCS, UDC, idxCellaFrom, idxCellaTo);
}
taElencoListePrelievo.updateStato(CodSoggetto, CodLista, (int)statoLista.completata);
answ = esitoOperazione.ok;
}
// se è già completata o NON iniziata dà errore
else
{
answ = esitoOperazione.errore_readOnly;
}
}
// se la lista non esiste dai errore
else
{
answ = esitoOperazione.errore;
}
}
catch
{ }
return answ;
}
/// <summary>
/// Effettua lo scaricamento della lista di prelievo indicata, ovvero
/// - toglie dalle posizioni di magazzino tutti gli UDC indicati come prelevati (liberando tali posizioni)
/// - assegna tutti gli UDC prelevati alla cella indicata per il tipo di lista di prelievo interessata
/// - elimina eventuali righe di prelievo della lista per UDC non effettivamente prelevate
/// - chiude la lista di prelievo (completata = 1)
/// </summary>
/// <param name="CodCS">Codice company/sito</param>
/// <param name="CodLista">codice della lista di prelievo</param>
/// <param name="CodSoggetto">cod operatore carrellista</param>
/// <returns>esito comando</returns>
public esitoOperazione scaricaListaPrelievo(string CodCS, string CodLista, string CodSoggetto)
{
/*
* Questa funzione serve ALLA FINE delle operazioni di prelievo, x chiudere la lista di prelievo
* - controllo se la lista esiste, ed è ancora NON completata
* - se risulta già completata errore xché è "readOnly" la lista essendo già completata (vedere l'enum in fondo al codice)
* - se la lista è ok
* - leggo da tipoLista prelievo alcuni dati (es codcella di destinazione)
* - sposto TUTTI gli UDC delle righeListaPrelievo, da posizione attuale a posizione indicata da tipo lista
* (quindi da codCella --> IdxCella --> spostamento
* indico la lista come completata = 1 (true)
* */
esitoOperazione answ = esitoOperazione.errore;
int trovate = 0;
DS_magazzino.ElencoListePrelievoDataTable tabella;
DS_magazzino.ElencoListePrelievoRow riga;
try
{
tabella = taElencoListePrelievo.getByCodLista(CodLista);
riga = tabella[0];
trovate = tabella.Rows.Count;
// se la lista esiste...
if (trovate > 0)
{
// se la lista è completata
if (riga.CodStatoLista == (int)statoLista.completata)
{
// ricavo il codtipolista
string codTipoListaAttuale = riga.CodTipoLista;
//leggo da tipoLista prelievo alcuni dati (es codcella di destinazione)
DS_magazzino.TipoListaPrelievoDataTable tabellaTipoLista = taTipoListaPrelievo.getByCodTipoLista(codTipoListaAttuale);
DS_magazzino.TipoListaPrelievoRow rigaTipoLista = tabellaTipoLista[0];
// leggo da righe lista prelievo il dato udc che mi serve
DS_magazzino.RigheListePrelievoDataTable tabellaRigheListaPrelievo = taRigheListePrelievo.getByCodLista(CodLista);
DS_magazzino.RigheListePrelievoRow rigaListaPrelievo = tabellaRigheListaPrelievo[0];
// leggo il codice della cella...
int idxPosizUdc = rigaTipoLista.IdxPosizioneFinal;
// scarico i vari UDC dal magazzino (come posizione corrente)
foreach (DS_magazzino.RigheListePrelievoRow row in tabellaRigheListaPrelievo.Rows)
{
// ricavo il codice UDC...
string UDC = row.UDC;
// mi serve per posizione udc corrente
DS_magazzino.PosizioneUdcCorrenteRow rigaUdcCorrente = taPosUdcCorr.getByUDC(UDC)[0];
// il secondo idx che mi serve
int idxCellaFrom = rigaUdcCorrente.IdxCella;
// sposto UDC
scaricaUDC(CodCS, UDC, idxCellaFrom, idxPosizUdc);
}
// segna come scaricata la lista prelievo
taElencoListePrelievo.updateStato(CodSoggetto, CodLista, (int)statoLista.scaricata);
// restituisce ok
answ = esitoOperazione.ok;
// ora eseguo stored x copiare in altra tabella (quella per AS...)
taElencoListePrelievo.stp_LP_exportToAs400(CodLista);
}
// se è già completata dà errore
else
{
answ = esitoOperazione.errore_readOnly;
}
}
// se la lista non esiste dai errore
else
{
answ = esitoOperazione.errore;
}
}
catch
{ }
return answ;
}
/// <summary>
/// Verifica la corrispondenza dati tra RigheListePrelievo ed ElencoCartellini
/// </summary>
/// <param name="CodLista"></param>
/// <param name="UDC"></param>
/// <returns></returns>
public bool verificaDatiUdc(string CodLista, string UDC)
{
bool answ = false;
try
{
DS_magazzino.ElencoListePrelievoDataTable tabellaElenco = taElencoListePrelievo.getByCodLista(CodLista);
DS_magazzino.ElencoListePrelievoRow rigaElenco = tabellaElenco[0];
DS_magazzino.ElencoCartelliniDataTable tabellaUDC = taElencoCartellini.getDetailsUdcByUdc(UDC);
DS_magazzino.ElencoCartelliniRow rigaUDC = tabellaUDC[0];
// ricavo dati da confrontare - da Lista ricavo particolare/esponente/figura
string particolareLista = rigaElenco.Particolare;
string esponenteLista = rigaElenco.Esponente;
string figuraLista = rigaElenco.Figura;
string codImballoLista = rigaElenco.CodImballo;
//stessi dati da UDC
string particolareUDC = rigaUDC.Particolare;
string esponenteUDC = rigaUDC.Esponente;
string figuraUDC = rigaUDC.Figura;
string codImballoUDC = rigaUDC.CodImballo;
// condizioni di uguaglianza...
bool particolareOk = false;
bool esponenteOk = false;
bool figuraOk = false;
bool codImballoOk = false;
// verifico le condizioni 1 ad 1...
particolareOk = (particolareLista == particolareUDC);
if (esponenteLista == "*")
{
esponenteOk = true;
}
else
{
esponenteOk = (esponenteLista == esponenteUDC);
}
if (figuraLista == "*")
{
figuraOk = true;
}
else
{
figuraOk = (figuraLista == figuraUDC);
}
if (codImballoLista == "*")
{
codImballoOk = true;
}
else
{
codImballoOk = (codImballoLista == codImballoUDC);
}
// verifica finale del risultato uguaglianza...
answ = (particolareOk && esponenteOk && figuraOk && codImballoOk);
}
catch
{
answ = false;
}
return answ;
}
/// <summary>
/// Conferma che un dato UDC è stato prelevato per soddisfare la lista di prelievo ed aggiorna o aggiunge riga in RigheListePrelievo
/// </summary>
/// <param name="CodLista">codice della lista di prelievo</param>
/// <param name="UDC">Codice UDC</param>
/// <returns>esito comando</returns>
public esitoOperazione confermaUdcPrelevatoPerLista(string CodLista, string UDC)
{
esitoOperazione answ = esitoOperazione.errore;
// verifico che i dati corrispondano con il metodo relativo (vedi sopra)
bool datiUdcOk = verificaDatiUdc(CodLista, UDC);
if (datiUdcOk)
{
// richiamo stored di upsert e dò risposta positiva
taRigheListePrelievo.upsertPrelevato(CodLista, UDC);
answ = esitoOperazione.ok;
}
else
{
// altrimenti dò errore mismatch e non proseguo
return answ = esitoOperazione.errore_mismatch;
}
return answ;
}
/// <summary>
/// annulla il prelievo di un UDC, aggiornando RigheListePrelievo (solo preventivato...)
/// </summary>
/// <param name="CodLista">codice della lista di prelievo</param>
/// <param name="UDC">Codice UDC</param>
/// <returns>esito comando</returns>
public esitoOperazione annullaUdcPrelevatoPerLista(string CodLista, string UDC)
{
esitoOperazione answ = esitoOperazione.errore;
/*
* Questa funzione va chiamata da web o da terminalino ogni volta che si fa un annullamento di avvenuto prelievo, ovvero il carrellista ha ANNULLATO un prelievo di un UDC associato ad una lista
*
* - in primis controllo: esiste questa riga di prelievo udc/lista?
* - se i dati non corrispondono esco e mando falso --> vedere l'enum in fondo al codice ed
* usare esitoOperazione.errore_mismatch
* - se i dati corrispondono allora
* - cerco riga e tolgo check come prelevato
* - se tutto ok passo esito ok
*
* */
try
{
// ricavo dati
DS_magazzino.RigheListePrelievoDataTable tabella = taRigheListePrelievo.getByCodLista(CodLista);
DS_magazzino.RigheListePrelievoRow riga = tabella[0];
// se i dati esistono procedo - eseguo stored che setta non prelevato = false per la riga selezionata
if (tabella.Rows.Count > 0)
{
taRigheListePrelievo.setAnnullaUdcPrelevato(CodLista, UDC);
answ = esitoOperazione.ok;
}
else
{
answ = esitoOperazione.errore_mismatch;
}
}
catch
{ }
return answ;
}
/// <summary>
/// Rigenera una Lista di prelievo togliendo gli UDC non ancora prelevati rimettendo in logica FIFO gli UDC "liberi" disponibili
/// </summary>
/// <param name="CodLista">codice della lista di prelievo</param>
/// <returns>esito comando</returns>
public esitoOperazione scambiaUdcPerLista(string CodLista)
{
esitoOperazione answ = esitoOperazione.errore;
/*
* Questa funzione va chiamata da web o da terminalino ogni volta che si fa una richiesta di cambio per un UDC già prelevato, ovvero un altro carrellista prelevato un UDC associato alla mia lista corrente - rigenera UDC da prelevare
* */
try
{
// ricavo dati
DS_magazzino.ElencoListePrelievoRow riga = taElencoListePrelievo.getByCodLista(CodLista)[0];
// svuoto PRIMA gli UDC non prelevati
taRigheListePrelievo.stp_RigheListePrelievo_eliminaNonPrelevate(CodLista);
// rigenero righe UDC da prelevare
DS_magazzino.ElencoCartelliniDataTable tabellaElencoCartellini = taElencoCartellini.getUdcUnusedOlder(CodLista);
allocaRigheListaPrelievo(riga.QtaTot, CodLista, tabellaElencoCartellini);
}
catch
{ }
return answ;
}
#endif
/// <summary>
/// Verifica il login utente andando a controllare il CodSoggetto da RilPro e salvando in sessione un oggetto user_std x l'utente corrispondente al cod soggetto secondo la tab soggetti2utente
/// </summary>
/// <param name="CodSoggetto"></param>
/// <returns>tipo di errore codificato</returns>
public esitoLoginTerm doUserLogin(string CodSoggetto)
{
esitoLoginTerm answ = esitoLoginTerm.errore;
try
{
answ = esitoLoginTerm.ok; //!!! FARE!!! vero controllo e user forced login!
}
catch
{
// !!! FARE logging tentativo connesisone con IP provenienza
}
return answ;
}
/// <summary>
/// verifica il codice barcode letto e restituisce il tipo di valore corrisponente
/// </summary>
/// <param name="barcodeIN"></param>
/// <returns></returns>
public tipoCodiceBarcode riconosciBarcode(string barcodeIN)
{
tipoCodiceBarcode answ = tipoCodiceBarcode.ND;
switch (barcodeIN.Substring(0,1))
{
case "O":
answ = tipoCodiceBarcode.Operatore;
break;
case "K":
answ = tipoCodiceBarcode.ListaPrelievo;
break;
case "P":
answ = tipoCodiceBarcode.Particolare;
break;
case "U":
answ = tipoCodiceBarcode.UDC;
break;
default:
break;
}
return answ;
}
#endregion
}
}
/// <summary>
/// definisce i tipi di codice che il barcode può leggere
/// </summary>
public enum tipoCodiceBarcode
{
/// <summary>
/// Tipo non riconosciuto
/// </summary>
ND,
/// <summary>
/// [O] - il barcode rappresenta un codice operatore
/// </summary>
Operatore,
/// <summary>
/// [K] - il barcode rappresenta una lista di prelievo
/// </summary>
ListaPrelievo,
/// <summary>
/// [U] - il barcode rappresenta un UDC
/// </summary>
UDC,
/// <summary>
/// [P] - il barcode rappresenta un particolare
/// </summary>
Particolare
}
/// <summary>
/// elenco degli esiti per una sessione di login da terminalino
/// </summary>
public enum esitoLoginTerm
{
/// <summary>
/// tutto ok, come true
/// </summary>
ok,
/// <summary>
/// non è andata, errore generico
/// </summary>
errore,
/// <summary>
/// errore x mancanza record in tab operatori di RilPro x CodSoggetto
/// </summary>
errore_noCodSogg,
/// <summary>
/// errore mancanza username corrisponende all'operatore il cui cod soggetto è stato passato
/// </summary>
errore_noUser
}
Binary file not shown.
Binary file not shown.