Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.2 patch 1262 git-svn-id: svn://10.65.10.50/trunk@17631 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			202 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <automask.h>
 | 
						|
#include <progind.h>
 | 
						|
 | 
						|
#include "pg0001.h"
 | 
						|
#include "pg0001500a.h"
 | 
						|
#include "../cg/cglib01.h"
 | 
						|
#include "../mg/mglib.h"
 | 
						|
#include "../mg/movmag.h"
 | 
						|
#include "../mg/rmovmag.h"
 | 
						|
 | 
						|
class TMaskpg00015 : public TAutomask
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						|
 | 
						|
public:
 | 
						|
  TMaskpg00015() : TAutomask("pg0001500a") { }
 | 
						|
  virtual ~TMaskpg00015() { }
 | 
						|
};
 | 
						|
 | 
						|
bool TMaskpg00015::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						|
{
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
class TCopiaMovMg : public TSkeleton_application  
 | 
						|
{
 | 
						|
	virtual bool check_autorization() const {return false;}
 | 
						|
  virtual const char * extra_modules() const {return "ba";}
 | 
						|
 | 
						|
protected:
 | 
						|
  virtual void main_loop();
 | 
						|
 | 
						|
public:
 | 
						|
};
 | 
						|
 | 
						|
void TCopiaMovMg::main_loop()
 | 
						|
{
 | 
						|
  TMaskpg00015 m;
 | 
						|
 | 
						|
  while (m.run() != K_QUIT)
 | 
						|
  {
 | 
						|
		TEsercizi_contabili es;
 | 
						|
		TArray movs;
 | 
						|
		const long damov = m.get_long(F_DANUM);
 | 
						|
		const long amov = m.get_long(F_ANUM);
 | 
						|
		const TDate newdate  = m.get_date(F_DATAMOV);
 | 
						|
		TMov_mag mov;
 | 
						|
		TRectype rec(LF_MOVMAG);
 | 
						|
		long newnmov = atol(mov.get_next_key()); 
 | 
						|
		const real valtot = m.get_real(F_VALTOT);
 | 
						|
		const int qmax = m.get_int(F_QMAX);
 | 
						|
		const real minval = m.get_real(F_VMIN);
 | 
						|
		const int cmax = m.get_int(F_CMAX);
 | 
						|
		real actval;
 | 
						|
 | 
						|
		{
 | 
						|
			TProgind rd(amov - damov + 1, "Lettura");
 | 
						|
 | 
						|
			for (long n = damov; n <= amov; n++)
 | 
						|
			{
 | 
						|
				rec.zero();
 | 
						|
				rec.put(MOVMAG_NUMREG, n),
 | 
						|
 | 
						|
				mov.read(rec);
 | 
						|
				mov.body();
 | 
						|
				mov.renum_mov(newnmov++);
 | 
						|
				mov.put(MOVMAG_DATAREG, newdate);
 | 
						|
				mov.put(MOVMAG_DATACOMP, newdate);
 | 
						|
				mov.put(MOVMAG_ANNOES, es.date2esc(newdate));
 | 
						|
 | 
						|
				const int nrows = mov.body().rows();
 | 
						|
 | 
						|
				for (int r = 1; r <= nrows; r++)
 | 
						|
				{
 | 
						|
					const TRectype & row = mov.body().row(r);
 | 
						|
					const real qta = row.get_int(RMOVMAG_QUANT);
 | 
						|
					const real prezzo = row.get_real(RMOVMAG_PREZZO);
 | 
						|
					real val = prezzo * qta;
 | 
						|
 | 
						|
					val.round(2);
 | 
						|
					actval += val;
 | 
						|
				}
 | 
						|
				movs.add(mov);
 | 
						|
				if (!rd.iscancelled())
 | 
						|
					rd.addstatus(1L);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		real varp = valtot / actval;
 | 
						|
 | 
						|
		varp.round(6);
 | 
						|
 | 
						|
		const real sign = varp > UNO ? UNO : -UNO;
 | 
						|
		int cnt = 0;
 | 
						|
		int loops = 0;
 | 
						|
		{
 | 
						|
			TProgind c(100, "Calcolo");
 | 
						|
 | 
						|
			while (sign * actval < sign * valtot && loops < 100)
 | 
						|
			{
 | 
						|
				const int nmov = movs.items();
 | 
						|
 | 
						|
				actval = ZERO;
 | 
						|
				for (int i = 0; i < nmov; i++)
 | 
						|
				{
 | 
						|
					TMov_mag &mov = (TMov_mag &) movs[i];
 | 
						|
					const int nrows = mov.body().rows();
 | 
						|
					int r;
 | 
						|
 | 
						|
					for (r = 1; r <= nrows; r++)
 | 
						|
					{
 | 
						|
						TRectype & row = (TRectype &) mov.body().row(r);
 | 
						|
						const real qta = row.get_real(RMOVMAG_QUANT);
 | 
						|
						const real prezzo = row.get_real(RMOVMAG_PREZZO);
 | 
						|
						
 | 
						|
						real v = varp * qta;
 | 
						|
						 
 | 
						|
						v.round(0);
 | 
						|
						int newqta = v.integer();
 | 
						|
 | 
						|
						if (prezzo >= minval && newqta > qmax)
 | 
						|
							newqta = qmax;
 | 
						|
						else
 | 
						|
							if (qta.integer() == newqta)
 | 
						|
							{
 | 
						|
								cnt++;
 | 
						|
								if (cnt == cmax)
 | 
						|
								{
 | 
						|
									cnt = 0;
 | 
						|
									if (sign > ZERO)
 | 
						|
										newqta++;
 | 
						|
									else 
 | 
						|
										newqta--;
 | 
						|
								}
 | 
						|
							}
 | 
						|
 | 
						|
						if (sign > ZERO)
 | 
						|
						{
 | 
						|
							if (newqta < qta.integer())
 | 
						|
								newqta = qta.integer();
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							if (newqta > qta.integer())
 | 
						|
								newqta = qta.integer();
 | 
						|
						}
 | 
						|
 | 
						|
						if (newqta < 0)
 | 
						|
							newqta = 0;
 | 
						|
 | 
						|
						real val = prezzo * newqta;
 | 
						|
 | 
						|
						val.round(2);
 | 
						|
						actval += val;
 | 
						|
						row.put(RMOVMAG_QUANT, newqta);
 | 
						|
					}
 | 
						|
					for (r = nrows; r > 0; r--)
 | 
						|
					{
 | 
						|
						const TRectype & row = mov.body().row(r);
 | 
						|
						const int qta = row.get_int(RMOVMAG_QUANT);
 | 
						|
						if (qta == 0)
 | 
						|
							mov.body().destroy_row(r, true);
 | 
						|
					}
 | 
						|
				}
 | 
						|
				varp = valtot / actval;
 | 
						|
				varp.round(6);
 | 
						|
				loops++;
 | 
						|
				if (!c.iscancelled())
 | 
						|
					c.addstatus(1L);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		TString msg;
 | 
						|
 | 
						|
		msg.format("Valore totale %s, devo registrare", (const char *) actval.stringa());
 | 
						|
 | 
						|
		if (yesno_box(msg))
 | 
						|
		{
 | 
						|
			const int nmov = movs.items();
 | 
						|
			TProgind w(nmov, "Scrittura");
 | 
						|
			TLocalisamfile movmag(LF_MOVMAG);
 | 
						|
 | 
						|
			for (int i = 0; i < nmov; i++)
 | 
						|
			{
 | 
						|
				TMov_mag &mov = (TMov_mag &) movs[i];
 | 
						|
				mov.write(movmag);
 | 
						|
				if (!w.iscancelled())
 | 
						|
					w.addstatus(1L);
 | 
						|
			}
 | 
						|
		}
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
int pg0001500(int argc, char* argv[])
 | 
						|
{
 | 
						|
  TCopiaMovMg a;
 | 
						|
  a.run(argc, argv, "Copia Movimenti di magazzino");
 | 
						|
  return 0;
 | 
						|
}
 |