e6cd49d1c2
git-svn-id: https://keyhammer.ath.cx/svn/GMW/trunk@385 365432ac-a1b5-4ffd-bb28-6d3099d32164
1399 lines
63 KiB
C#
1399 lines
63 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using SteamWare;
|
|
|
|
namespace GMW_data
|
|
{
|
|
/// <summary>
|
|
/// classe gestione operazioni sul magazzino
|
|
/// </summary>
|
|
public class MagClass
|
|
{
|
|
#region area table adapters
|
|
|
|
// variabile di tipo table adapter
|
|
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;
|
|
public DS_magazzinoTableAdapters.V_statoCelleCapienzaAssegnatiTableAdapter taStatoCelle;
|
|
public DS_magazzinoTableAdapters.RapQualTableAdapter taRapQual;
|
|
public DS_magazzinoTableAdapters.v_RapQualSuntoTableAdapter taRQ_sunto;
|
|
public DS_magazzinoTableAdapters.v_posizioniDelibereTableAdapter taPosizDelib;
|
|
public DS_magazzinoTableAdapters.AnagParticolariTableAdapter taAnagPart;
|
|
public DS_magazzinoTableAdapters.AnagPosizioniTableAdapter taAnagPos;
|
|
|
|
|
|
/// <summary>
|
|
/// init dei table adapters
|
|
/// </summary>
|
|
protected void initTA()
|
|
{
|
|
// istanzio oggetto
|
|
|
|
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();
|
|
taStatoCelle = new GMW_data.DS_magazzinoTableAdapters.V_statoCelleCapienzaAssegnatiTableAdapter();
|
|
taRapQual = new GMW_data.DS_magazzinoTableAdapters.RapQualTableAdapter();
|
|
taRQ_sunto = new GMW_data.DS_magazzinoTableAdapters.v_RapQualSuntoTableAdapter();
|
|
taPosizDelib = new GMW_data.DS_magazzinoTableAdapters.v_posizioniDelibereTableAdapter();
|
|
taAnagPart = new GMW_data.DS_magazzinoTableAdapters.AnagParticolariTableAdapter();
|
|
taAnagPos = new GMW_data.DS_magazzinoTableAdapters.AnagPosizioniTableAdapter();
|
|
}
|
|
/// <summary>
|
|
/// effettua setup dei connection strings da web.config delal singola applicazione
|
|
/// </summary>
|
|
protected virtual void setupConnectionStringBase()
|
|
{
|
|
string connString = memLayer.ML.confReadString("GMWConnectionString");
|
|
// connections del db
|
|
taAnagMag.Connection.ConnectionString = connString;
|
|
taBlocchi.Connection.ConnectionString = connString;
|
|
taCelle.Connection.ConnectionString = connString;
|
|
taTipoCella.Connection.ConnectionString = connString;
|
|
taCartellini.Connection.ConnectionString = connString;
|
|
taPosUdcCorr.Connection.ConnectionString = connString;
|
|
taPosUdcStorico.Connection.ConnectionString = connString;
|
|
taMagOverw.Connection.ConnectionString = connString;
|
|
taDettMagPart.Connection.ConnectionString = connString;
|
|
taDettUDC.Connection.ConnectionString = connString;
|
|
taElencoListePrelievo.Connection.ConnectionString = connString;
|
|
taElencoCartellini.Connection.ConnectionString = connString;
|
|
taRigheListePrelievo.Connection.ConnectionString = connString;
|
|
taTipoListaPrelievo.Connection.ConnectionString = connString;
|
|
taVParticolariOverwiew.Connection.ConnectionString = connString;
|
|
taPartExpFig.Connection.ConnectionString = connString;
|
|
taStatoCelle.Connection.ConnectionString = connString;
|
|
taRapQual.Connection.ConnectionString = connString;
|
|
taRQ_sunto.Connection.ConnectionString = connString;
|
|
taPosizDelib.Connection.ConnectionString = connString;
|
|
taAnagPart.Connection.ConnectionString = connString;
|
|
taAnagPos.Connection.ConnectionString = connString;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Inizializzazione
|
|
|
|
protected MagClass()
|
|
{
|
|
initTA();
|
|
setupConnectionStringBase();
|
|
}
|
|
|
|
/// <summary>
|
|
/// oggetto static per fare chiamate sul magazzino
|
|
/// </summary>
|
|
public static MagClass magazzino = new MagClass();
|
|
|
|
#endregion
|
|
|
|
#region metodi protected
|
|
|
|
/// <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);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Metodi esposti
|
|
|
|
#region operazioni su UDC
|
|
|
|
/// <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="IdxCellaTo">Cella di destinazione</param>
|
|
/// <param name="resetRLP">indica se sia richiesto resettare le Righe Liste Prelievo con lo spostsamento</param>
|
|
/// <returns>esito comando</returns>
|
|
public bool spostaUDC(string CodCS, string UDC, int IdxCellaTo, bool resetRLP)
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
taPosUdcCorr.stp_spostaUdc(CodCS, UDC, IdxCellaTo, resetRLP);
|
|
// cerco nuova posizione...
|
|
if (taPosUdcCorr.getByCellaUdc(UDC, IdxCellaTo).Rows.Count > 0)
|
|
{
|
|
answ = true;
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore durante spostamento cella: {0}", e), tipoLog.EXCEPTION);
|
|
}
|
|
// solo se ha fatto spostamento posizione corrente verifico se fare spostamento in posizione LOGICA magazzino
|
|
if (answ)
|
|
{
|
|
try
|
|
{
|
|
// verifico tipo cella e se ci sia da fare spostamento in mag logico/contabile
|
|
int idxTipoCella = taCelle.getByIdxCella(IdxCellaTo)[0].IdxTipoCella;
|
|
bool needSetMag = taTipoCella.getByIdx(idxTipoCella)[0].SetMag;
|
|
if (needSetMag)
|
|
{
|
|
// cambio (eventualmente) la posizione "logica" dato lo spostamento (il codice magazzino...)
|
|
int idxBlocco = taCelle.getByIdxCella(IdxCellaTo)[0].IdxBlocco;
|
|
int idxPosizione = Convert.ToInt32(taBlocchi.getByIdx(idxBlocco)[0].CodMag);
|
|
taCartellini.updateIdxPosizione(UDC, idxPosizione);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore durante indicazione posizione UDC: {0}", e), tipoLog.EXCEPTION);
|
|
}
|
|
}
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// effettua lo scaricamento di un UDC (x spedizione)
|
|
/// </summary>
|
|
/// <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 UDC, int IdxCellaFrom, int IdxPosizUdc)
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
taPosUdcCorr.stp_scaricaUdc(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 UDC, decimal qta)
|
|
{
|
|
string CodSoggetto = CodSoggCurrUser;
|
|
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>
|
|
/// verifica se l'UDC indicato sia valido, ovvero esistente
|
|
/// </summary>
|
|
/// <param name="UDC"></param>
|
|
/// <returns></returns>
|
|
public bool checkUDC(string UDC)
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
answ = (taElencoCartellini.getDetailsUdcByUdc(UDC).Rows.Count > 0);
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// effettua lo scaricamento (da db e da AS400) degli UDC di MP/WIP
|
|
/// </summary>
|
|
/// <param name="UDC"></param>
|
|
/// <returns></returns>
|
|
public bool scaricaUdcMpWip(string UDC)
|
|
{
|
|
// inizializzo
|
|
bool answ = false;
|
|
int idxCellaFrom = 0;
|
|
int idxPosizUdcCorr = 0;
|
|
int idxPosizUdcDest = 0;
|
|
// calcolo posizione UDC corrente (se c'è...)
|
|
try
|
|
{
|
|
// mi serve per posizione udc corrente
|
|
DS_magazzino.PosizioneUdcCorrenteRow rigaUdcCorrente = taPosUdcCorr.getByUDC(UDC)[0];
|
|
// il secondo idx che mi serve
|
|
idxCellaFrom = rigaUdcCorrente.IdxCella;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore in fase di recupero cella per l'UDC {0}: {1}{2}", UDC, Environment.NewLine, e), tipoLog.EXCEPTION);
|
|
}
|
|
// ora calcolo gli altri dati dalla rica ElencoCartellini dell'UDC
|
|
try
|
|
{
|
|
// calcolo posizione destinazione da state machine...
|
|
idxPosizUdcCorr = taElencoCartellini.getDetailsUdcByUdc(UDC)[0].IdxPosizione;
|
|
idxPosizUdcDest = StateMachine.SM.getIdxPostizioneTo("UDC_CONS", idxPosizUdcCorr);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore in fase di recupero dati posizioni from/to per l'UDC {0}: {1}{2}", UDC, Environment.NewLine, e), tipoLog.EXCEPTION);
|
|
}
|
|
// ora provo ad eseguire!
|
|
try
|
|
{
|
|
if (idxPosizUdcDest != 0) // solo se c'è una posizione da cui poter fare lo scaricamento...
|
|
{
|
|
// sposto UDC
|
|
answ = scaricaUDC(UDC, idxCellaFrom, idxPosizUdcDest);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore in fase di scaricamneto dell'UDC {0}: {1}{2}", UDC, Environment.NewLine, e), tipoLog.EXCEPTION);
|
|
}
|
|
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// riattiva un UDC (se permesso) da una posizione consumata ad una valida
|
|
/// </summary>
|
|
/// <param name="UDC"></param>
|
|
/// <param name="CodSoggetto"></param>
|
|
/// <returns></returns>
|
|
public bool riattivaUdc(string UDC, string CodSoggetto)
|
|
{
|
|
// init
|
|
bool answ = false;
|
|
try
|
|
{
|
|
// salvo dati cartellino PRE
|
|
DS_Applicazione.ElencoCartelliniRow rigaUdcPre = DataProxy.obj.taCartellini.stp_getByUdc(UDC)[0];
|
|
GMW_data.DataProxy.obj.taCartellini.stp_riattivaUdc(UDC, CodSoggetto);
|
|
// salvo dati cartellino POST
|
|
DS_Applicazione.ElencoCartelliniRow rigaUdcPost = DataProxy.obj.taCartellini.stp_getByUdc(UDC)[0];
|
|
answ = true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Eccezione: {0}{1}", Environment.NewLine, e), tipoLog.EXCEPTION);
|
|
}
|
|
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// sblocca un UDC (se permesso)
|
|
/// </summary>
|
|
/// <param name="UDC"></param>
|
|
/// <param name="CodSoggetto"></param>
|
|
/// <returns></returns>
|
|
public bool sbloccaUdc(string UDC, string CodSoggetto)
|
|
{
|
|
// init
|
|
bool answ = false;
|
|
try
|
|
{
|
|
GMW_data.DataProxy.obj.taCartellini.stp_sbloccaUdc(UDC, CodSoggetto);
|
|
answ = true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Eccezione: {0}{1}", Environment.NewLine, e), tipoLog.EXCEPTION);
|
|
}
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// controlla se l'udc delal qualità indicato ha benestare qualità ("S")
|
|
/// </summary>
|
|
/// <param name="UDC"></param>
|
|
/// <returns></returns>
|
|
public bool udcMpHasBenesQual(string UDC)
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
DS_magazzino.RapQualRow rigaRapQual = taRapQual.getByUdc(UDC)[0];
|
|
if (rigaRapQual.BenesQual == "S")
|
|
{
|
|
answ = true;
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region procedure di verifica e traduzione dati da anagrafiche
|
|
|
|
/// <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.Trim();
|
|
string esponenteLista = rigaElenco.Esponente.Trim();
|
|
string figuraLista = rigaElenco.Figura.Trim();
|
|
string codImballoLista = rigaElenco.CodImballo.Trim();
|
|
|
|
//stessi dati da UDC
|
|
string particolareUDC = rigaUDC.Particolare.Trim();
|
|
string esponenteUDC = rigaUDC.Esponente.Trim();
|
|
string figuraUDC = rigaUDC.Figura.Trim();
|
|
string codImballoUDC = rigaUDC.CodImballo.Trim();
|
|
|
|
// 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>
|
|
/// restituisce codice soggetto dell'user corrente
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string CodSoggCurrUser
|
|
{
|
|
get
|
|
{
|
|
// ricavo da session...
|
|
string codSoggetto = "";
|
|
try
|
|
{
|
|
codSoggetto = DataProxy.obj.taSogg2Oper.getByUserDominio(user_std.UtSn.utente, user_std.UtSn.dominio)[0].CodSoggetto;
|
|
// salvo in sessione...
|
|
memLayer.ML.setSessionVal("CodSoggetto", codSoggetto);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Non sono riuscito a recuperare il codice soggetto per l'utente loggato: {0}, errore {1}{2}", user_std.UtSn.userNameAD, Environment.NewLine, e), tipoLog.ERROR);
|
|
}
|
|
return codSoggetto;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// restituisce l'IdxCella dato il CodCella
|
|
/// </summary>
|
|
/// <param name="CodCS">Codice company/sito</param>
|
|
/// <param name="CodCella"></param>
|
|
/// <returns></returns>
|
|
public int IdxCellaByCodCella(string CodCS, string CodCella)
|
|
{
|
|
int answ = 0;
|
|
try
|
|
{
|
|
answ = taCelle.getByCodCella(CodCella)[0].IdxCella; // NON controllo il CodCS...
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// restituisce il CodCella dato l'IdxCella
|
|
/// </summary>
|
|
/// <param name="CodCS">Codice company/sito</param>
|
|
/// <param name="IdxCella"></param>
|
|
/// <returns></returns>
|
|
public string CodCellaByIdxCella(string CodCS, int IdxCella)
|
|
{
|
|
string answ = "";
|
|
try
|
|
{
|
|
answ = taCelle.getByIdxCella(IdxCella)[0].CodCella; // NON controllo il CodCS...
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// verifica se la cella indicata sia attiva
|
|
/// </summary>
|
|
/// <param name="CodCS">Codice company/sito</param>
|
|
/// <param name="IdxCella"></param>
|
|
/// <returns></returns>
|
|
public bool cellaAttiva(string CodCS, int IdxCella)
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
answ = taCelle.getByIdxCella(IdxCella)[0].Attiva; // NON controllo il CodCS...
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// verifica se la cella indicata sia piena
|
|
/// </summary>
|
|
/// <param name="CodCS">Codice company/sito</param>
|
|
/// <param name="IdxCella"></param>
|
|
/// <returns></returns>
|
|
public bool cellaPiena(string CodCS, int IdxCella)
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
answ = taCelle.getByIdxCella(IdxCella)[0].Piena; // NON controllo il CodCS...
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// verifica la cella indicata sia valida, ovvero esistente
|
|
/// </summary>
|
|
/// <param name="CodCella"></param>
|
|
/// <returns></returns>
|
|
public bool checkCella(string CodCella)
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
answ = (taCelle.getByCodCella(CodCella).Rows.Count > 0);
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// verifica se il particolare indicato sia valido, ovvero esistente
|
|
/// </summary>
|
|
/// <param name="CodCS">Codice company/sito</param>
|
|
/// <param name="Particolare"></param>
|
|
/// <returns></returns>
|
|
public bool checkParticolare(string CodCS, string Particolare)
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
answ = (taVParticolariOverwiew.getByParticolareFull(Particolare, CodCS).Rows.Count > 0);
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// restituisce il num di UDC che corrispondono alla richiesta indicata
|
|
/// </summary>
|
|
/// <param name="CodCS"></param>
|
|
/// <param name="Particolare"></param>
|
|
/// <param name="codEsponente"></param>
|
|
/// <param name="codFigura"></param>
|
|
/// <param name="codImballo"></param>
|
|
/// <param name="codTipoLista"></param>
|
|
/// <returns></returns>
|
|
public int numUdcDaPart(string CodCS, string Particolare, string codEsponente, string codFigura, string codImballo, string codTipoLista)
|
|
{
|
|
int answ = 0;
|
|
try
|
|
{
|
|
answ = taVParticolariOverwiew.getByDatiListaPrelievo(Particolare, CodCS, codEsponente, codFigura, codImballo, codTipoLista)[0].NumUDC;
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// verifica se l'UDC sia riattivabile, ovvero
|
|
/// - sia permesso da web.config
|
|
/// - l'UDC sia in un mag che permette riattivazione
|
|
/// </summary>
|
|
/// <param name="UDC"></param>
|
|
/// <returns></returns>
|
|
public bool udcIsRiattivabile(string UDC)
|
|
{
|
|
bool answ = false;
|
|
// se permesso da web config controllo
|
|
if (memLayer.ML.confReadBool("riattUdcPermessa"))
|
|
{
|
|
try
|
|
{
|
|
// recupero posizione attuale
|
|
int idxPosizione = taElencoCartellini.getDetailsUdcByUdc(UDC)[0].IdxPosizione;
|
|
// verifico se riattivabile
|
|
answ = taAnagPos.getByIdxPosizione(idxPosizione)[0].IsRiattivaEnabled;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore nella riattivazione dell'UDC {0}:{1}{2}", UDC, Environment.NewLine, e), tipoLog.EXCEPTION);
|
|
}
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region liste di prelievo
|
|
|
|
/// <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>
|
|
/// <param name="Destinatario"></param>
|
|
/// <param name="DestinatarioDescrizione"></param>
|
|
/// <returns></returns>
|
|
public string creaListaPrelievo(string CodCS, string TipoListaPrelievo, string Particolare, string Esponente, string Figura, decimal QtaTot, string CodImballo, string Destinatario, string DestinatarioDescrizione)
|
|
{
|
|
/*
|
|
* - 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;
|
|
// non la valorizzo qui ma calcolo ... se non fa verificare
|
|
string RagioneSociale = "";
|
|
|
|
// ricavo da session...
|
|
string codSoggetto = CodSoggCurrUser;
|
|
// 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), TipoListaPrelievo, memLayer.ML.confReadString("CodCS"), codCliente, RagioneSociale, codSoggetto, Particolare, descParticolare, disegnoGrezzo, Esponente, Figura, CodImballo, QtaTot, Destinatario, DestinatarioDescrizione);
|
|
|
|
// ricavo prima (e unica) riga dalla select
|
|
DS_magazzino.ElencoListePrelievoRow rigaElencoListe = tabellaElencoListe[0];
|
|
|
|
// ricavo valore del CodLista attuale appena inserito
|
|
codListaAttuale = rigaElencoListe.CodLista;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Eccezione creazione lista prelievo: {0}{1}", Environment.NewLine, e), tipoLog.ERROR);
|
|
}
|
|
if (codListaAttuale != "")
|
|
{
|
|
answ = codListaAttuale;
|
|
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)
|
|
{
|
|
memLayer.ML.setSessionVal("activeTask", string.Format("Lista Prelievo {0}", CodLista));
|
|
memLayer.ML.setSessionVal("CodListaAttiva", CodLista, true);
|
|
// 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 parte 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)
|
|
{
|
|
memLayer.ML.emptySessionVal("CodListaAttiva");
|
|
memLayer.ML.emptySessionVal("activeTask");
|
|
// 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)
|
|
{
|
|
// controllo se ALMENO un UDC sia stsato prelevato
|
|
int numUdcPrelevati = taRigheListePrelievo.getByCodListaPrelevate(CodLista).Rows.Count;
|
|
if (numUdcPrelevati > 0)
|
|
{
|
|
// 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.getByCodListaPrelevate(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;
|
|
// sposto UDC
|
|
spostaUDC(CodCS, _UDC, idxCellaTo, false);
|
|
// dopo aver spostato UDC sistemo eventuali Righe di Prelievo x lo stesso UDC pending...
|
|
taRigheListePrelievo.stp_RLP_sbloccaNonPrelevate(CodLista, _UDC);
|
|
}
|
|
// libero le righe non prelevate...
|
|
taRigheListePrelievo.stp_RLP_eliminaNonPrelevate(CodLista);
|
|
// aggiorno stato lista
|
|
taElencoListePrelievo.updateStato(CodSoggetto, CodLista, (int)statoLista.completata);
|
|
answ = esitoOperazione.ok;
|
|
}
|
|
else //nessun UDC prelevato
|
|
{
|
|
answ = esitoOperazione.errore_noUdc;
|
|
}
|
|
}
|
|
// 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)
|
|
* */
|
|
// setup eventuali valori x rettifica
|
|
bool fatto = false;
|
|
|
|
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.getByCodListaPrelevate(CodLista);
|
|
DS_magazzino.RigheListePrelievoRow rigaListaPrelievo = tabellaRigheListaPrelievo[0];
|
|
|
|
// leggo il codice della cella...
|
|
string CodEvento = rigaTipoLista.CodEvento;
|
|
// posizione corrente dell'UDC
|
|
int idxPosizUdcCorr = 0;
|
|
// posizioen di destinazione per UDC corrente
|
|
int idxPosizUdcDest = 0;
|
|
// cella di provenienza
|
|
int idxCellaFrom = 0;
|
|
// cella di destinazione
|
|
int idxCellaTo = 0;
|
|
// 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
|
|
idxCellaFrom = rigaUdcCorrente.IdxCella;
|
|
// calcolo posizione destinazione da state machine...
|
|
idxPosizUdcCorr = taElencoCartellini.getDetailsUdcByUdc(UDC)[0].IdxPosizione;
|
|
idxPosizUdcDest = StateMachine.SM.getIdxPostizioneTo(CodEvento, idxPosizUdcCorr);
|
|
// a questo punto mi calcolo se c'è una cella di destinazione associata
|
|
try
|
|
{
|
|
idxCellaTo = MagClass.magazzino.taCelle.getByCodMag(CodCS, idxPosizUdcDest.ToString())[0].IdxCella;
|
|
}
|
|
catch
|
|
{
|
|
idxCellaTo = 0;
|
|
}
|
|
// sposto UDC, e così facendo genero movimenti batch x AS400
|
|
fatto = scaricaUDC(UDC, idxCellaFrom, idxPosizUdcDest);
|
|
// sposto nella PRIMA cella di destinazione associata l'UDC
|
|
if (idxCellaTo > 0)
|
|
{
|
|
spostaUDC(CodCS, UDC, idxCellaTo, false);
|
|
}
|
|
if (fatto)
|
|
{
|
|
// dopo aver scaricato UDC sistemo eventuali Righe di Prelievo x lo stesso pending...
|
|
magazzino.taRigheListePrelievo.stp_RLP_sbloccaNonPrelevate(CodLista, UDC);
|
|
}
|
|
}
|
|
// 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...) - SOLO SE NON E' prelievo fusi...
|
|
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>
|
|
/// resetta (riporta in bozza) una lista di prelievo, spostando gli UDC alla posizione standard precedente
|
|
/// </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 resetListaPrelievo(string CodCS, string CodLista, string CodSoggetto)
|
|
{
|
|
memLayer.ML.emptySessionVal("CodListaAttiva");
|
|
memLayer.ML.emptySessionVal("activeTask");
|
|
// 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)
|
|
{
|
|
// ricontrollo che la lista sia completata
|
|
if (riga.CodStatoLista >= (int)statoLista.completata)
|
|
{
|
|
// calcolo tipo lista di prelievo
|
|
string codTipoListaAttuale = riga.CodTipoLista;
|
|
// dal tipo lista determino l'evento
|
|
string codEvento = taTipoListaPrelievo.getByCodTipoLista(codTipoListaAttuale)[0].CodEvento;
|
|
// dall'evento la posizione iniziale
|
|
int idxPosizione = StateMachine.SM.taTTPE.getByEvento(codEvento)[0].IdxPosizione;
|
|
// lo trasformo x avere la cella di destinazione...
|
|
int idxCellaTo = taCelle.getFirstByPosizione(idxPosizione.ToString())[0].IdxCella;
|
|
// leggo da righe lista prelievo il dato udc che mi serve
|
|
DS_magazzino.RigheListePrelievoDataTable tabellaRigheListaPrelievo = taRigheListePrelievo.getByCodListaPrelevate(CodLista);
|
|
DS_magazzino.RigheListePrelievoRow rigaListaPrelievo = tabellaRigheListaPrelievo[0];
|
|
// sposto ("metto a terra") gli UDC
|
|
foreach (DS_magazzino.RigheListePrelievoRow row in tabellaRigheListaPrelievo.Rows)
|
|
{
|
|
// ricavo il codice UDC...
|
|
string _UDC = row.UDC;
|
|
// sposto UDC
|
|
spostaUDC(CodCS, _UDC, idxCellaTo, false);
|
|
}
|
|
// indico le righe come NON prelevate...
|
|
taRigheListePrelievo.stp_RLP_resetPrelevate(CodLista);
|
|
// aggiorno stato lista che torna a BOZZA
|
|
taElencoListePrelievo.updateStato(CodSoggetto, CodLista, (int)statoLista.bozza);
|
|
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>
|
|
/// 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
|
|
taRigheListePrelievo.upsertPrelevato(CodLista, UDC);
|
|
// ...dò risposta positiva
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// Aggiunge UN SOLO UDC in logica FIFO tra gli UDC "liberi" disponibili
|
|
/// </summary>
|
|
/// <param name="CodLista">codice della lista di prelievo</param>
|
|
/// <returns>esito comando</returns>
|
|
public esitoOperazione addUdcPerLista(string CodLista)
|
|
{
|
|
esitoOperazione answ = esitoOperazione.errore;
|
|
try
|
|
{
|
|
// ricavo dati
|
|
DS_magazzino.ElencoListePrelievoRow riga = taElencoListePrelievo.getByCodLista(CodLista)[0];
|
|
// rigenero righe UDC da prelevare
|
|
DS_magazzino.ElencoCartelliniDataTable tabellaElencoCartellini = new DS_magazzino.ElencoCartelliniDataTable();
|
|
// aggiungo l'UDC + vecchio (se c'è)
|
|
try
|
|
{
|
|
tabellaElencoCartellini.ImportRow(taElencoCartellini.getUdcUnusedOlder(CodLista)[0]);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(String.Format("Errore in aggiunta UDC a lista prelievo: {0}", e), tipoLog.EXCEPTION);
|
|
}
|
|
allocaRigheListaPrelievo(riga.QtaTot, CodLista, tabellaElencoCartellini);
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// vero/falso che l'utent eha una lista di prelievo attiva
|
|
/// </summary>
|
|
public bool userHasActiveLP
|
|
{
|
|
get
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
answ = (MagClass.magazzino.taElencoListePrelievo.getByCodSogg(CodSoggCurrUser).Rows.Count > 0);
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// codice della lista di prelievo attiva
|
|
/// </summary>
|
|
public string codListaAttivaUtente
|
|
{
|
|
get
|
|
{
|
|
string answ = "";
|
|
try
|
|
{
|
|
answ = MagClass.magazzino.taElencoListePrelievo.getByCodSogg(CodSoggCurrUser)[0].CodLista;
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
}
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="CodLista"></param>
|
|
/// <returns></returns>
|
|
public bool listaPrelevabile(string CodLista)
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
answ = (MagClass.magazzino.taElencoListePrelievo.getByCodLista(CodLista).Select("CodStatoLista = 1").Length > 0); // filtro su stato = 1 (può esser presa in carico)
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region area rapporti qualità
|
|
|
|
/// <summary>
|
|
/// Crea gli UDC da associare ai cartellini dei rapporti qualità deliberati, li associa e se richiesto lancia stampa
|
|
/// </summary>
|
|
/// <param name="numRapQual">identificativo rapp qualità</param>
|
|
/// <param name="doPrint">true/false se stampare</param>
|
|
/// <returns></returns>
|
|
public bool creaUdcDaRappQualita(int numRapQual, bool doPrint)
|
|
{
|
|
bool answ = false;
|
|
// ottengo elenco righe dei cartellini del rapp qualità indicato SENZA righe UDC
|
|
DS_magazzino.RapQualDataTable tabRapQual = taRapQual.getByNumRapQualNoUdc(numRapQual);
|
|
// per prima cosa verifico che ci sia il rapporto di qualità in esame e che abbia righe da associare ad UDC
|
|
if (tabRapQual.Rows.Count > 0)
|
|
{
|
|
string UDC = "";
|
|
foreach (DS_magazzino.RapQualRow rqRow in tabRapQual)
|
|
{
|
|
// se non ha già un UDC... e se NON E' stato già scaricato...
|
|
if (rqRow.UDC == "" && rqRow.LegaScaric.ToUpper() == "N")
|
|
{
|
|
answ = true;
|
|
|
|
// per ogni riga creo un UDC
|
|
DS_Applicazione.ElencoCartelliniDataTable tabCartellini = DataProxy.obj.taCartellini.stp_insNewFull(memLayer.ML.confReadString("CodCS"), memLayer.ML.confReadString("BilanciaMP"), string.Format("{0:yy}", DateTime.Now), rqRow.CodFor, rqRow.CodLega, "", "", "", "", DateTime.Now, 0, memLayer.ML.confReadString("CodImballoMP"), CodSoggCurrUser, 0, memLayer.ML.confReadInt("IdxPosizMP"), "M", "UDC_MP", rqRow.Qta, Convert.ToDouble(rqRow.Qta), 1, memLayer.ML.confReadString("CodStatoMP"), "", false); // UDC_MP HARD CODED!!!
|
|
try
|
|
{
|
|
UDC = tabCartellini[0].UDC;
|
|
// lo associo!
|
|
taRapQual.stp_associaUDC(rqRow.ProgUDC, UDC);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Non sono riuscito a creare associazioen UDC / rapp qual: UDC creato: {0}, progRappQual: {1}, eccezione: {2}", UDC, rqRow.ProgUDC, e), tipoLog.EXCEPTION);
|
|
}
|
|
}
|
|
}
|
|
|
|
// se devo stampare lancio stampa...
|
|
if (doPrint)
|
|
{
|
|
stampaUdcDaRappQualita(numRapQual);
|
|
}
|
|
}
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// effettua la (ri)stampa di TUTTI gli UDC dato un rapporto di qualità
|
|
/// </summary>
|
|
/// <param name="numRapQual">identificativo rapp qualità</param>
|
|
/// <returns></returns>
|
|
public bool stampaUdcDaRappQualita(int numRapQual)
|
|
{
|
|
bool answ = false;
|
|
// ottengo elenco righe dei cartellini del rapp qualità indicato SENZA righe UDC
|
|
DS_magazzino.RapQualDataTable tabRapQual = taRapQual.getByNumRapQual(numRapQual);
|
|
// per prima cosa verifico che ci sia il rapporto di qualità in esame e che abbia righe da associare ad UDC
|
|
if (tabRapQual.Rows.Count > 0)
|
|
{
|
|
answ = true;
|
|
foreach (DS_magazzino.RapQualRow rqRow in tabRapQual)
|
|
{
|
|
answ = reportPrinter.obj.stampaCartellino(tipoCartellino.cartMP, rqRow.UDC, "");
|
|
}
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
|
|
public enum esitoOperazione
|
|
{
|
|
ok, // tutto ok, come true
|
|
errore, // non è andata, errore generico
|
|
errore_mismatch, // errore x mancanza corrispondenza tra dati (particolare-esponente-figura di lista ed UDC, ad esempio)
|
|
errore_readOnly, // errore xché ild ato è read only o bloccato (es lista di prelievo già completata, NON posso riprenderla in carico)
|
|
errore_posUDC, // errore perché UDC è in una posizione che non consente l'operazione indicata
|
|
errore_noUdc
|
|
}
|
|
|
|
public enum statoLista
|
|
{
|
|
bozza = 0,
|
|
generata,
|
|
iniziata,
|
|
completata,
|
|
scaricata
|
|
} |