// XTPCalendarCustomDataProvider.h: interface for the CXTPCalendarCustomProperties class.
//
// This file is a part of the XTREME CALENDAR MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////

//{{AFX_CODEJOCK_PRIVATE
#if !defined(_XTP_CALENDAR_CUSTOM_DATA_PROVIDER_H__)
#define _XTP_CALENDAR_CUSTOM_DATA_PROVIDER_H__
//}}AFX_CODEJOCK_PRIVATE

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

//===========================================================================
// Summary:
//     Custom implementation of XTPCalendarData based on notifications.
// Remarks:
//     This class is the implementation of the XTPCalendarData abstract
//     class which represents a data portion of the Calendar control.
//
//     This implementation is based on a notifications mechanism.
//     Each significant method sends a custom notification, which could be
//     handled by a user and where a custom data access code should be
//     implemented.
// See Also:
//     CXTPCalendarData overview
//===========================================================================
class _XTP_EXT_CLASS CXTPCalendarCustomDataProvider : public CXTPCalendarData
{
	//{{AFX_CODEJOCK_PRIVATE
	DECLARE_DYNAMIC(CXTPCalendarCustomDataProvider)
	//}}AFX_CODEJOCK_PRIVATE
public:

	//-----------------------------------------------------------------------
	// Summary:
	//     Default constructor.
	// Remarks:
	//     Constructs a Data object. To establish a connection to a
	//     specified data source and initialize the object you must
	//     call Open() member function immediately after construction.
	// See Also: Open()
	//-----------------------------------------------------------------------
	CXTPCalendarCustomDataProvider();

	//-----------------------------------------------------------------------
	// Summary:
	//     Default Destructor.
	// Remarks:
	//     Handles all deallocation.
	//-----------------------------------------------------------------------
	virtual ~CXTPCalendarCustomDataProvider();

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this member function to close the connection to a data source.
	//-----------------------------------------------------------------------
	virtual void Close();

protected:

	//-----------------------------------------------------------------------
	// Summary:
	//     Retrieves day events for a specified day from the data source.
	// Parameters:
	//     dtDay - A specified day.
	// Remarks:
	//     This method retrieves all appointments for a specified day from
	//     the data source. It includes recurrence appointments occurrences,
	//     regular appointments for this day, multi day appointments which
	//     also have a part of this day.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoRetrieveDayEvents which a user can handle and
	//     implement a custom method.
	// Returns:
	//     A collection of events for a specified day.
	// See also:
	//     XTP_NC_CALENDAR_DoRetrieveDayEvents notification
	//-----------------------------------------------------------------------
	virtual CXTPCalendarEventsPtr DoRetrieveDayEvents(COleDateTime dtDay);

	//-----------------------------------------------------------------------
	// Summary:
	//     Removes all events from the data source.
	// Remarks:
	//     This method removes all appointments from the data source.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoRemoveAllEvents which a user can handle and
	//     implement a custom method.
	// See also:
	//     XTP_NC_CALENDAR_DoRemoveAllEvents notification
	//-----------------------------------------------------------------------
	virtual void DoRemoveAllEvents();

	//-----------------------------------------------------------------------
	// Summary:
	//     Read event from the data source.
	// Parameters:
	//     dwEventID - Event ID of the read target.
	// Remarks:
	//     This method retrieves all data for a specified event.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoRead_Event which a user can handle and
	//     implement a custom method.
	// Returns:
	//     A pointer to the new CXTPCalendarEvent object which fields
	//     are filled with a data from the data source.
	// See also:
	//     XTP_NC_CALENDAR_DoRead_Event notification
	//-----------------------------------------------------------------------
	virtual CXTPCalendarEventPtr DoRead_Event(DWORD dwEventID);

	//-----------------------------------------------------------------------
	// Summary:
	//     Read recurrence pattern from the data source
	// Parameters:
	//     dwPatternID - Pattern ID of the read target.
	// Remarks:
	//     This method retrieves all data for a specified recurrence pattern.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoRead_RPattern which a user can handle and
	//     implement a custom method.
	// Returns:
	//     A pointer to the new CXTPCalendarRecurrencePatternPtr object which
	//     fields are filled with a data from the data source.
	// See also:
	//     XTP_NC_CALENDAR_DoRead_RPattern notification
	//-----------------------------------------------------------------------
	virtual CXTPCalendarRecurrencePatternPtr DoRead_RPattern(DWORD dwPatternID);

	//-----------------------------------------------------------------------
	// Summary:
	//     Creates a new event in the data source
	// Parameters:
	//     pEvent - Pointer to the CXTPCalendarEvent object which describes
	//              all data fields of a newly created record.
	//     rdwNewEventID - [out] EventID of a newly created record
	// Remarks:
	//     This method creates a data record corresponding with the
	//     specified event.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoCreate_Event which a user can handle and
	//     implement a custom method.
	// Returns:
	//     TRUE if event created successfully,
	//     FALSE in case of any error during the process.
	// See also:
	//     XTP_NC_CALENDAR_DoCreate_Event notification
	//-----------------------------------------------------------------------
	virtual BOOL DoCreate_Event(CXTPCalendarEvent* pEvent, DWORD& rdwNewEventID);

	//-----------------------------------------------------------------------
	// Summary:
	//     Updates event properties in the data source.
	// Parameters:
	//     pEvent - Pointer to the CXTPCalendarEvent object which describes
	//              all data fields of an event.
	// Remarks:
	//     This method updates a data record corresponding with the
	//     specified event.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoUpdate_Event which a user can handle and
	//     implement a custom method.
	// Returns:
	//     TRUE if an event updated successfully,
	//     FALSE in case of any errors during the process.
	// See also:
	//     XTP_NC_CALENDAR_DoUpdate_Event notification
	//-----------------------------------------------------------------------
	virtual BOOL DoUpdate_Event (CXTPCalendarEvent* pEvent);

	//-----------------------------------------------------------------------
	// Summary:
	//     Deletes an event from the data source.
	// Parameters:
	//     pEvent - Pointer to the CXTPCalendarEvent object which describes
	//              all data fields of an event.
	// Remarks:
	//     This method deletes a data record corresponding with the
	//     specified event.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoDelete_Event which a user can handle and
	//     implement a custom method.
	// Returns:
	//     TRUE if an event deleted successfully,
	//     FALSE in case of any errors during the process.
	// See also:
	//     XTP_NC_CALENDAR_DoDelete_Event notification
	//-----------------------------------------------------------------------
	virtual BOOL DoDelete_Event (CXTPCalendarEvent* pEvent);

	//-----------------------------------------------------------------------
	// Summary:
	//     Creates a new recurrence pattern in the data source
	// Parameters:
	//     pPattern - Pointer to the CXTPCalendarRecurrencePattern object which
	//                describes all data fields of a newly created record.
	//     rdwNewPatternID - [out] ID of a newly created record
	// Remarks:
	//     This method creates a data record corresponding with the
	//     specified recurrence pattern.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoCreate_RPattern which a user can handle and
	//     implement a custom method.
	// Returns:
	//     TRUE if recurrence pattern created successfully,
	//     FALSE in case of any error during the process.
	// See also:
	//     XTP_NC_CALENDAR_DoCreate_RPattern notification
	//-----------------------------------------------------------------------
	virtual BOOL DoCreate_RPattern (CXTPCalendarRecurrencePattern* pPattern, DWORD& rdwNewPatternID);

	//-----------------------------------------------------------------------
	// Summary:
	//     Updates a recurrence pattern in the database
	// Parameters:
	//     pPattern - Pointer to the CXTPCalendarRecurrencePattern object.
	// Remarks:
	//     This method updates a data record corresponding with the
	//     specified recurrence pattern.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoUpdate_RPattern which a user can handle and
	//     implement a custom method.
	// Returns:
	//     TRUE if recurrence pattern updated successfully,
	//     FALSE in case of any error during the process.
	// See also:
	//     XTP_NC_CALENDAR_DoUpdate_RPattern notification
	//-----------------------------------------------------------------------
	virtual BOOL DoUpdate_RPattern (CXTPCalendarRecurrencePattern* pPattern);

	//-----------------------------------------------------------------------
	// Summary:
	//     Deletes a recurrence pattern from the database
	// Parameters:
	//     pPattern - Pointer to the CXTPCalendarRecurrencePattern object
	//                which should be deleted.
	// Remarks:
	//     This method deletes a data record corresponding with the
	//     specified recurrence pattern.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoDelete_RPattern which a user can handle and
	//     implement a custom method.
	// Returns:
	//     TRUE if recurrence pattern deleted successfully,
	//     FALSE in case of any error during the process.
	// See also:
	//     XTP_NC_CALENDAR_DoDelete_RPattern notification
	//-----------------------------------------------------------------------
	virtual BOOL DoDelete_RPattern (CXTPCalendarRecurrencePattern* pPattern);

	//-----------------------------------------------------------------------
	// Summary:
	//     This method implements Getting all events without generating
	//     recurrence occurrences.
	// Remarks:
	//     This method actually implements working with the data source.
	//     Simple events are included as is.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoGetAllEvents_raw which a user can handle and
	//     implement a custom method.
	// Returns:
	//     A CXTPCalendarEvents pointer containing a collection of
	//     all events.
	// See also:
	//     XTP_NC_CALENDAR_DoGetAllEvents_raw notification, GetAllEvents_raw()
	//-----------------------------------------------------------------------
	virtual CXTPCalendarEventsPtr DoGetAllEvents_raw();

	//-----------------------------------------------------------------------
	// Summary:
	//     This method implements getting a collection of events expiring in
	//     the period from dtFrom during next spPeriod.
	// Parameters:
	//     dtFrom   - Start date and time of a specified period.
	//     spPeriod - A duration of a specified period.
	// Remarks:
	//     This method is used by a reminders manager.
	//
	//     This implementation of the method sends a notification
	//     XTP_NC_CALENDAR_DoGetUpcomingEvents which a user can handle and
	//     implement a custom method.
	// Returns:
	//     A CXTPCalendarEvents pointer containing a collection of
	//     upcoming events.
	// See Also:
	//     CXTPCalendarRemindersManager overview,
	//     XTP_NC_CALENDAR_DoGetUpcomingEvents notification.
	//-----------------------------------------------------------------------
	virtual CXTPCalendarEventsPtr DoGetUpcomingEvents(COleDateTime dtFrom, COleDateTimeSpan spPeriod);
};

///////////////////////////////////////////////////////////////////
#endif // !defined(_XTP_CALENDAR_CUSTOM_DATA_PROVIDER_H__)