Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la verione 98.01.04 sul main trunk git-svn-id: svn://10.65.10.50/trunk@6986 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			188 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <automask.h>
 | 
						|
 | 
						|
#include "velib.h"
 | 
						|
#include "velib04d.h"
 | 
						|
 | 
						|
#include <doc.h>
 | 
						|
#include <rdoc.h>
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TConsegna ordini mask
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TConsegna_mask : public TAutomask
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual bool on_field_event(class TOperable_field& f, TField_event e, long jolly);
 | 
						|
 | 
						|
public:
 | 
						|
  void doc2mask(const TDocumento& doc);
 | 
						|
 | 
						|
  TConsegna_mask() : TAutomask("velib04d") { }
 | 
						|
  virtual ~TConsegna_mask() { }
 | 
						|
};
 | 
						|
 | 
						|
bool TConsegna_mask::on_field_event(class TOperable_field& f, TField_event e, long jolly)
 | 
						|
{
 | 
						|
  switch (f.dlg())
 | 
						|
  {
 | 
						|
  case S_QTADAEVADERE:
 | 
						|
    if (e == fe_modify)
 | 
						|
    {
 | 
						|
      TMask& m = f.mask();
 | 
						|
      const real qta_residua   = m.get_real(S_QTARESIDUA);
 | 
						|
      const real qta_daevadere = m.get_real(S_QTADAEVADERE);
 | 
						|
      if (qta_daevadere > ZERO)
 | 
						|
      {
 | 
						|
        m.set(S_RIGACONSEGNATA, "X");
 | 
						|
        if (qta_daevadere >= qta_residua)
 | 
						|
        {
 | 
						|
          m.set(S_RIGAEVASA, "X");
 | 
						|
          m.disable(S_RIGAEVASA);
 | 
						|
        }
 | 
						|
        else
 | 
						|
          m.enable(S_RIGAEVASA);
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
        m.set(S_RIGAEVASA, " ");
 | 
						|
        m.enable(S_RIGAEVASA);
 | 
						|
      }
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  case F_CONSEGNA:
 | 
						|
    if (e == fe_button)
 | 
						|
    {
 | 
						|
      TSheet_field& s = sfield(F_ROWS);
 | 
						|
      FOR_EACH_SHEET_ROW(s, n, row)
 | 
						|
      {
 | 
						|
        const real residuo = row->get(S_QTARESIDUA-FIRST_FIELD);
 | 
						|
        const real evaso = row->get(S_QTADAEVADERE-FIRST_FIELD);
 | 
						|
        if (evaso == ZERO && residuo > ZERO)
 | 
						|
        {
 | 
						|
          row->add(residuo.string(), S_QTADAEVADERE-FIRST_FIELD);
 | 
						|
          row->add("X", S_RIGAEVASA-FIRST_FIELD);
 | 
						|
          s.disable_cell(n, S_RIGAEVASA-FIRST_FIELD);
 | 
						|
        }
 | 
						|
        row->add("X", S_RIGACONSEGNATA-FIRST_FIELD);
 | 
						|
      }
 | 
						|
      s.force_update();
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  case F_ROWS:
 | 
						|
    if (e == se_query_add || e == se_query_del)
 | 
						|
      return FALSE;
 | 
						|
  default:break;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TConsegna_mask::doc2mask(const TDocumento& doc)
 | 
						|
{
 | 
						|
  for (int n = fields()-1; n >= 0; n--)
 | 
						|
  {
 | 
						|
    TMask_field& f = fld(n);
 | 
						|
    const TFieldref* fr = f.field();
 | 
						|
    if (fr) 
 | 
						|
    {
 | 
						|
      const TString& val = doc.get(fr->name());
 | 
						|
      f.set(val);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  TSheet_field& s = sfield(F_ROWS);
 | 
						|
  s.destroy();
 | 
						|
  const int rows = doc.physical_rows();
 | 
						|
  for (int i = 0; i < rows; i++)
 | 
						|
  {
 | 
						|
    const TRiga_documento& rec = doc[i+1];
 | 
						|
    TToken_string& r = s.row(i);
 | 
						|
    r = " ";
 | 
						|
 | 
						|
    bool evasa = rec.get_bool(RDOC_RIGAEVASA);
 | 
						|
    const real residuo = rec.get_real(RDOC_QTA) - rec.get_real(RDOC_QTAEVASA);
 | 
						|
    if (residuo <= ZERO)
 | 
						|
    {
 | 
						|
      r.add(" ");
 | 
						|
      evasa = TRUE;
 | 
						|
    }
 | 
						|
    else
 | 
						|
      r.add(residuo.string());
 | 
						|
    r.add(" ");             // Da evadere
 | 
						|
    if (evasa) 
 | 
						|
    {
 | 
						|
      s.disable_cell(i, -1);
 | 
						|
      r.add("X");
 | 
						|
    }
 | 
						|
    else
 | 
						|
      r.add(" ");
 | 
						|
    r.add(rec.get(RDOC_CODMAG).left(3));
 | 
						|
    r.add(rec.get(RDOC_CODMAG).mid(3));
 | 
						|
    r.add(rec.get(RDOC_CODART));
 | 
						|
    r.add(rec.get(RDOC_DESCR));
 | 
						|
    r.add(rec.get(RDOC_TIPORIGA));
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TConsegna ordini
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
TConsegna_ordini::TConsegna_ordini(const char* cod) 
 | 
						|
                : TElaborazione(cod)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
 | 
						|
                               const TDate& data_elab, bool interattivo)
 | 
						|
{ 
 | 
						|
  const int items_in = doc_in.items();
 | 
						|
  const int items_out = doc_out.items();
 | 
						|
  CHECK(items_in > 0, "Nessun documento da elaborare");
 | 
						|
  CHECK(items_out> 0, "Nessun documento da generare");
 | 
						|
  CHECK(items_in == 1 || items_out == 1 || items_out == items_in, 
 | 
						|
        "Numero di documenti da elborare 'strano'");
 | 
						|
 | 
						|
  bool ok = TRUE;
 | 
						|
 | 
						|
  TConsegna_mask m;
 | 
						|
 | 
						|
  const int items_max = items_in > items_out ? items_in : items_out;
 | 
						|
  for (int d = 0; d < items_max && ok; d++)
 | 
						|
  {
 | 
						|
    TDocumento& indoc = doc_in[d < items_in ? d : 0];
 | 
						|
    TDocumento& outdoc = doc_out[d < items_out ? d : 0];
 | 
						|
    
 | 
						|
    m.doc2mask(indoc);
 | 
						|
    ok = m.run() == K_ENTER;
 | 
						|
    if (ok)
 | 
						|
    {
 | 
						|
      TSheet_field& s = m.sfield(F_ROWS);
 | 
						|
      FOR_EACH_SHEET_ROW(s, n, row) if (*row->get(0) > ' ')
 | 
						|
      {   
 | 
						|
        TRiga_documento& inrec = indoc[n+1];
 | 
						|
        const real daeva = row->get(S_QTADAEVADERE - FIRST_FIELD);
 | 
						|
        if (daeva > ZERO)
 | 
						|
        {
 | 
						|
          const real qtaevasa = inrec.get_real(RDOC_QTAEVASA) + daeva;
 | 
						|
          inrec.put(RDOC_QTAEVASA, qtaevasa);
 | 
						|
          inrec.put(RDOC_RIGAEVASA, row->get(S_RIGAEVASA - FIRST_FIELD));
 | 
						|
        }
 | 
						|
 | 
						|
        const TString16 tiporiga = inrec.get(RDOC_TIPORIGA);
 | 
						|
        TRiga_documento& outrec = outdoc.new_row(tiporiga);
 | 
						|
        outrec = inrec;
 | 
						|
        outrec.set_numero(outdoc.physical_rows());
 | 
						|
        outrec.put(RDOC_QTA, daeva);
 | 
						|
        outrec.zero(RDOC_QTAEVASA);
 | 
						|
        outrec.zero(RDOC_RIGAEVASA);
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    if (indoc.is_evaso())
 | 
						|
    {
 | 
						|
      indoc.stato(stato_finale()[0]);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return ok;     
 | 
						|
}
 |