// PdfItem.h: interface for the CPdfItem class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PDFITEM_H__F38B651F_1990_4FED_B3B6_295FBC2D8D56__INCLUDED_)
#define AFX_PDFITEM_H__F38B651F_1990_4FED_B3B6_295FBC2D8D56__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CPdfItem  
{
public:
	
	enum
	{
		m_eWeightChar=0,
		m_eCostChar,

		m_eFirstChar=m_eWeightChar,
		m_eLastChar=m_eCostChar
	};

	//	конструктор - создает структуру изделия (работает рекурсивно)
	//	фильтру по дате надо ставить invalid, чтобы не происходило фильтрации по дате.
	//	фильтр по серийному номеру должен быть пустой строкой, чтобы не происходило фильтрации
	//	по серийному номеру
	CPdfItem(CaplAPI* api,CaplInstance* inst,COleDateTime codtDTFilter,CString& csSNFilter,
			 CaplInstance* ciContext);
	//	деструктор - удаляет структуру (работает рекурсивно)
	virtual ~CPdfItem();

	//		возвращает количество дочерних объектов + 1 (работает рекурсивно)
	int		GetCount(void);

	//		загружает все хар-ки указанных типов для изделия 
	//		caCharVals - список аттрибутов, которыми представленно значение хар-ки
	//		т.е - масса - m_api->m_charact_mgr.a_apl_charact_val_meas_val
	//			  стоимость - m_api->m_charact_mgr.a_apl_charact_val_monet_val
	//		caChars - список указателей на instance - хар-к в бд
	//		ipChars - список флагов, показывающих, какие хар-ки загружать
	//		iCharCount - кол-во хар-к для загрузки
	void	LoadChars(CaplTAggr<CaplAttr*,CaplAttr*,APLAGGR_LIST>& caCharVals,
					  CaplTAggr<CaplInstance*,CaplInstance*,APLAGGR_LIST>& caChars,
					  int* ipChars,int iCharCount);

	//		подсчитывает значения хар-к
	//		dpRetVals - указатель на массив куда вернут значения хар-к
	//		ipChars - список флагов, показывающих, какие хар-ки считать.
	//		iCharCount - кол-во хар-к в массиве
	//		aeTypesOrder - список типов хар-к, по приоритету.
	void	CalcChars(double* dpRetVals,int* ipChars,int iCharCount,aplExtent& aeTypesOrder);

	//		возвращает список дочерних объектов первого уровня
	void	GetChilds(CPtrArray& paChilds);
	//		возвращает информацию об изделии
	void	GetInfo(CStringList& csInfo);


protected:

	CaplAPI*		m_api;
	CaplInstance*	m_inst;

	COleDateTime	m_codtDTFilter;
	CString			m_csSNFilter;
	CaplInstance*	m_ciContext;

	CPdfItem**		m_pChildItems;
	int				m_iChildsCount;

	CString			m_csPrdID;
	CString			m_csPrdName;
	CString			m_csPdfID;
	CString**		m_pcsCharTypes;

	double**		m_pdInitialValues;
	double**		m_pdCalculatedValues;

	//	количество
	double			m_dQuantity;


	CaplMap**		m_pChars;


	//				фильтрует дочерние объекты по дате, серийному номеру и контексту.
	void			FilterChilds(aplExtent& aeRelsNfd,aplExtent& aePdfsNfd,aplExtent& aeRelsFd,
								 aplExtent& aePdfsFd);
	//				получает информацию об изделии
	void			LoadInfo(void);
};

#endif // !defined(AFX_PDFITEM_H__F38B651F_1990_4FED_B3B6_295FBC2D8D56__INCLUDED_)
