## MrpCalendar

MrpCalendar — represents a calendar in the project.

## Functions

MrpCalendar * | mrp_calendar_new ()
MrpCalendar * | mrp_calendar_copy ()
MrpCalendar * | mrp_calendar_derive ()
void | mrp_calendar_reparent ()
void | mrp_calendar_remove ()
const gchar * | mrp_calendar_get_name ()
void | mrp_calendar_set_name ()
void | mrp_calendar_day_set_intervals ()
GList * | mrp_calendar_day_get_intervals ()
gint | mrp_calendar_day_get_total_work ()
MrpDay * | mrp_calendar_get_day ()
MrpDay * | mrp_calendar_get_default_day ()
void | mrp_calendar_set_default_days ()
void | mrp_calendar_set_days ()
MrpCalendar * | mrp_calendar_get_parent ()
GList * | mrp_calendar_get_children ()
MrpInterval * | mrp_interval_new ()
MrpInterval * | mrp_interval_copy ()
MrpInterval * | mrp_interval_ref ()
void | mrp_interval_unref ()
void | mrp_interval_get_absolute ()

## Properties

gchar * | name | Read / Write
gpointer | project | Read / Write

## Signals

void | calendar-changed | Run Last

## Types and Values

| MrpCalendarPriv
struct | MrpCalendar
| MrpInterval

## Object Hierarchy

        GObject
        ╰── MrpObject
            ╰── MrpCalendar

## Includes

    #include <libplanner/planner.h>

## Description

A calendar contains the information on working/nonworking time for resources. A calendar has a default week, specifying the day types (MrpDay) used for each day of the week by default.

Day types can be overriden so that a working day has another set of working time intervals per calendar. Certain dates can be overridden to use another day type as well.

## Functions

### mrp_calendar_new ()

    MrpCalendar *
    mrp_calendar_new (const gchar *name,
                      MrpProject *project);

Creates a new MrpCalendar. The calendar will be empty so you need to set the default week and/or override days, see `mrp_calendar_set_default_days()` and `mrp_calendar_set_days()`.

#### Parameters

name | name of the calendar |
project | the MrpProject that the new calendar will belong to |

#### Returns

A new MrpCalendar.

### mrp_calendar_copy ()

    MrpCalendar *
    mrp_calendar_copy (const gchar *name,
                       MrpCalendar *calendar);

Copies `calendar` , making the new calendar a base calendar, that does not have a parent.

#### Parameters

name | the name of the new calendar |
calendar | a MrpCalendar to copy |

#### Returns

a new MrpCalendar that is a copy of `calendar` .

### mrp_calendar_derive ()

    MrpCalendar *
    mrp_calendar_derive (const gchar *name,
                         MrpCalendar *parent);

Derives a new calendar from `parent` . The new calendar will inherit all properties from `parent` , so if no days are overridden, the calendars will be identical.

#### Parameters

name | the name of the new calendar |
parent | the MrpCalendar to derive |

#### Returns

a new MrpCalendar that is derived from `parent` .

### mrp_calendar_reparent ()

    void
    mrp_calendar_reparent (MrpCalendar *new_parent,
                           MrpCalendar *child);

Changes the parent of `calendar` so that it inherits `new_parent` , instead of its old parent.

#### Parameters

new_parent | the new parent |
child | an MrpCalendar |

### mrp_calendar_remove ()

    void
    mrp_calendar_remove (MrpCalendar *calendar);

Removes `calendar` from the project. If the calendar is used by the project, a new calendar is set for the project. If the calendar has a parent, the parent is used, otherwise the first child of the root is used. For resources, the calendar is exchanged for the parent if one exists, otherwise the resource calendar is unset, so that the project default will be used.

#### Parameters

calendar | an MrpCalendar |

### mrp_calendar_get_name ()

    const gchar *
    mrp_calendar_get_name (MrpCalendar *calendar);

Retrieves the name of the calendar.

#### Parameters

calendar | an MrpCalendar |

#### Returns

the calendar name.

### mrp_calendar_set_name ()

    void
    mrp_calendar_set_name (MrpCalendar *calendar,
                           const gchar *name);

Sets the name of the calendar.

#### Parameters

calendar | an MrpCalendar |
name | the new name |

### mrp_calendar_day_set_intervals ()

    void
    mrp_calendar_day_set_intervals (MrpCalendar *calendar,
                                    MrpDay *day,
                                    GList *intervals);

Overrides the working time for the day type `day` when used in `calendar` .

#### Parameters

calendar | an MrpCalendar |
day | an MrpDay |
intervals | list of MrpInterval to set for the specified day |

### mrp_calendar_day_get_intervals ()

    GList *
    mrp_calendar_day_get_intervals (MrpCalendar *calendar,
                                    MrpDay *day,
                                    gboolean check_ancestors);

Retrieves the working time for the given day/calendar combination. If `check_ancestors` is `TRUE`, the calendar hierarchy is searched until a calendar that has set the working time for this day type is found. If `FALSE`, the returned list will be empty if there is no explicit working time set for `calendar` .

#### Parameters

calendar | an MrpCalendar |
day | an MrpDay |
check_ancestors | specifies if the whole calendar hierarchy should be checked |

#### Returns

List of MrpInterval, specifying the working time for `day` .

### mrp_calendar_day_get_total_work ()

    gint
    mrp_calendar_day_get_total_work (MrpCalendar *calendar,
                                     MrpDay *day);

Calculates the total amount of work for `day` in `calendar` .

#### Parameters

calendar | an MrpCalendar |
day | an MrpDay |

#### Returns

the amount of work in seconds.

### mrp_calendar_get_day ()

    MrpDay *
    mrp_calendar_get_day (MrpCalendar *calendar,
                          mrptime date,
                          gboolean check_ancestors);

Retrieves the day type for the given date and calender. If `check_ancestors` is `TRUE`, the parent and grandparent, and so on, is searched if `calendar` does not have an overridden day type for the specified date.

#### Parameters

calendar | an MrpCalendar |
date | an mrptime |
check_ancestors | specifies if the whole calendar hierarchy should be checked |

#### Returns

An MrpDay.

### mrp_calendar_get_default_day ()

    MrpDay *
    mrp_calendar_get_default_day (MrpCalendar *calendar,
                                  gint week_day);

Retrieves the default day for `calendar` .

#### Parameters

calendar | an MrpCalendar |
week_day | integer in the range 0 - 6, where 0 is Sunday |

#### Returns

default MrpDay.

### mrp_calendar_set_default_days ()

    void
    mrp_calendar_set_default_days (MrpCalendar *calendar,
                                   gint week_day,
                                   ...);

Sets days in the default week for `calendar` . Those are the days that are used as fallback is a date is not overridden.

#### Parameters

calendar | an MrpCalendar |
week_day | integer in the range 0 - 6, where 0 is Sunday |
... | MrpDay followed by more week day/MrpDay pairs, terminated by -1 |

### mrp_calendar_set_days ()

    void
    mrp_calendar_set_days (MrpCalendar *calendar,
                           mrptime date,
                           ...);

Overrides specific dates in `calendar` , setting the type of day to use for those dates.

#### Parameters

calendar | an MrpCalendar |
date | an mrptime |
... | MrpDay followed by more mrptime/MrpDay pairs, terminated by -1 |

### mrp_calendar_get_parent ()

    MrpCalendar *
    mrp_calendar_get_parent (MrpCalendar *calendar);

Retrieves the parent calendar of `calendar` . The parent is the calendar that a calendar falls back to if a date or day type is not overridden.

#### Parameters

calendar | an MrpCalendar |

#### Returns

The parent calendar.

### mrp_calendar_get_children ()

    GList *
    mrp_calendar_get_children (MrpCalendar *calendar);

Retreives a list of the children, i.e. the calenderas that are immediately derived from `calendar` .

#### Parameters

calendar | an MrpCalendar |

#### Returns

List of `calendar` 's children.

### mrp_interval_new ()

    MrpInterval *
    mrp_interval_new (mrptime start,
                      mrptime end);

Creates a new MrpInterval ranging from `start` to `end` .

#### Parameters

start | an mrptime specifying the start of the interval |
end | an mrptime specifying the end of the interval |

#### Returns

The newly created interval.

### mrp_interval_copy ()

    MrpInterval *
    mrp_interval_copy (MrpInterval *interval);

Copies `interval` .

#### Parameters

interval | an MrpInterval |

#### Returns

The copied interval.

### mrp_interval_ref ()

    MrpInterval *
    mrp_interval_ref (MrpInterval *interval);

Increases the reference count on `interval` .

#### Parameters

interval | an MrpInterval |

#### Returns

The interval.

### mrp_interval_unref ()

    void
    mrp_interval_unref (MrpInterval *interval);

Decreases the reference count on `interval` . When the count goes to 0, the interval is freed.

#### Parameters

interval | an MrpInterval |

### mrp_interval_get_absolute ()

    void
    mrp_interval_get_absolute (MrpInterval *interval,
                               mrptime offset,
                               mrptime *start,
                               mrptime *end);

Retrieves the start and end time of interval, with an optional `offset` .

#### Parameters

interval | an MrpInterval |
offset | the offset to add to start and end |
start | location to store start time, or `NULL` |
end | location to store end time, or `NULL` |

## Types and Values

### MrpCalendarPriv

    typedef struct _MrpCalendarPriv MrpCalendarPriv;

A private struct for internal use only. The definition of this structure is not publically available.

### struct MrpCalendar

    struct MrpCalendar;

Object representing a calendar in the project.

### MrpInterval

    typedef struct _MrpInterval MrpInterval;

Represents a time interval.

## Property Details

### The `“name”` property

      “name”                     gchar *

The name of the calendar.

Flags: Read / Write

Default value: "empty"

### The `“project”` property

      “project”                  gpointer

The project this calendar belongs to.

Flags: Read / Write

## Signal Details

### The `“calendar-changed”` signal

    void
    user_function (MrpCalendar *mrpcalendar,
                   gpointer     user_data)

#### Parameters

mrpcalendar | the object which received the signal. |
user_data | user data set when the signal handler was connected. |

Flags: Run Last