// resVedomDlg.h : header file
//

#if !defined(AFX_RESVEDOMDLG_H__29DA47AC_2850_42B1_BC8D_A6B335328691__INCLUDED_)
#define AFX_RESVEDOMDLG_H__29DA47AC_2850_42B1_BC8D_A6B335328691__INCLUDED_

#include "resource.h"
#include "apl_api.h"
#include <apl_gui.h>
//#include "ResizableDialog.h"
#include "InstPropertyCtrl.h"
#include "afxwin.h"

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


class finalVedomost //окончательная структура для поиска и вывода на экран
{
public:
	CaplInstance* resource;//объект-ресурс
	CaplInstance* obj;//изделие, выступающее в качестве ресурса 
	CaplInstance* unit;//единица измерения
	CaplInstance* resourceType;//тип ресурса
	CaplInstance* bp;//бизнес-процесс ресурса
	CaplInstance* pdf;//изделие, с которым связан бп ресурса
	CString resTypeName;//тип ресурса
	CString resId;//id объекта,который является ресурсом 
	CString resName;//наименование объекта,который является ресурсом 
	CString resVersion;//версия объекта,который является ресурсом 
	double resMeasurement;//количество ресурса
	double pdfMeasurement;//количество изделий
	CString resUnitType;//наименование единицы измерения

	aplExtent *pExtUsedPdfs; // Спискок использующих изделий (по просьбе ЦКБА)

	finalVedomost()
	{
		resource=0;
		obj=0;
		unit=0;
		bp=0;
		pdf=0;
		resourceType=0;
		resTypeName="";
		resId="";
		resName="";
		resVersion="";
		pdfMeasurement=0;
		resMeasurement=0;
		resUnitType="";
		pExtUsedPdfs=0;
	}

	~finalVedomost()
	{
		if(0!=pExtUsedPdfs) delete pExtUsedPdfs;
	}

};
/////////////////////////////////////////////////////////////////////////////
// CResVedomDlg dialog
class CResVedomDlg : public CaplResizableDialog
{
// Construction
public:
	CaplAPI *m_api;//указатель на менеджеры
	CaplInstance *m_bp;//бизнес-процесс, ресурсы которого читаются (если пользователем выбран в дереве бизнес-процесс)
	CaplInstance *m_pdf;//версия изделия, для изготовления которого выводить ресурсы (если пользователем выбрана в дереве версия изделия)
	aplExtent m_extBPs;//все инстансы бизнес-процессов по выбранному(с учетом вложенности)
	aplExtent m_extBPResources;//собственно все ресурсы
	CaplInstance *m_context;//контекст для фильтра по контексту
	CString m_sn;//серийный номер для фильтра по серийному номеру
	COleDateTime m_time;//дата для фильтра по датам

	int m_iAlgType; // 0 - сумма, 1 - максимум

	CArray<finalVedomost,finalVedomost> m_finTable;//массив этих структур

	bool GetBPResourceTypes(); //записываем в listbox все возможные типы ресурсов
//	void FindAssociatedBP(aplExtent &ext,aplExtent &ext_out);//получение списка ассоциированных бизнес-процессов
	void GetAllBPResources(aplExtent &ext,bool from_base=true);//получим все ресурсы бизнес-процессов по выбранному (рекурсивно)
	bool FilterResourcesByType(CaplInstance *resource);//проверяем на соответствие выбранным типам ресурсов
	void FillFinalStruct(CaplInstance *pdf=0,double pdf_amount=0);//заполнение массива окончательных структур
//	bool GetResourceAttrs(finalVedomost *tempVed,CaplInstance *actionResource);//получение атрибутов ресурса
	bool SetOut();//вывод на экран

	CResVedomDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
	//{{AFX_DATA(CResVedomDlg)
	enum { IDD = IDD_RESVEDOM_DIALOG };
	CEdit	m_priority_ctrl;
	CaplButton	m_BtnCancel;
	CaplButton	m_BtnSelColumn;
	CaplButton	m_BtnSelChar;
	CaplButton	m_BtnSave;
	CaplButton	m_BtnGo;
	CEdit	m_time_ctrl;
	CEdit	m_sn_ctrl;
	CButton	m_filter_ctrl;
	CEdit	m_context_ctrl;
	CListBox	m_chosenResTypes;
	CListBox	m_resTypes;
	CEdit	m_actionId;
	CString	m_id;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CResVedomDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//int m_CountALlString;
	CaplTAggr<SItemColumnData*,SItemColumnData*,APLAGGR_LIST_OR_AUTOKILLREF> m_Items;

	HICON m_hIcon;
	CInstPropertyCtrl m_reportCtrl;

	// Generated message map functions
	//{{AFX_MSG(CResVedomDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnClose();
	afx_msg void OnAddResType();
	afx_msg void OnRemoveResType();
	afx_msg void OnGo();
	afx_msg void OnSave();
	virtual void OnCancel();
	afx_msg void OnAddAllResType();
	afx_msg void OnRemoveAllResType();
	afx_msg void OnFilter();
	afx_msg void OnBtnSelectColumn();
	afx_msg void OnSelectCharacterysticSet();
	afx_msg void OnDblclkResTypes();
	afx_msg void OnDblclkChosenTypes();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
public:
	CComboBox m_algorithm_type_ctrl;
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_RESVEDOMDLG_H__29DA47AC_2850_42B1_BC8D_A6B335328691__INCLUDED_)
