#~ return self.summary def update_cal_rset(self): return self def update_cal_from(self, ar): return self.start_date def update_cal_calendar(self): return self.event_type def update_cal_summary(self, i): return unicode(self) dd.update_field( RecurrentEvent, 'every_unit', default=Recurrencies.yearly, blank=False, null=False) class RecurrentEvents(dd.Table): model = 'cal.RecurrentEvent' required = dd.required(user_groups='office', user_level='manager') column_names = "start_date end_date name every_unit event_type *" auto_fit_column_widths = True order_by = ['start_date'] insert_layout = """ name start_date end_date every_unit event_type """
#~ cities = models.ManyToManyField('countries.Place') #~ description = dd.BabelTextField(format='plain',blank=True) url = models.URLField(blank=True) class Stage(dd.Sequenced): event = dd.ForeignKey('events.Event', related_name="stages") city = dd.ForeignKey('countries.Place', related_name="stages") def __unicode__(self): return unicode(self.city) def get_siblings(self): return self.event.stages.order_by('seqno') dd.update_field(Event, 'name', blank=True) class StagesByEvent(dd.Table): model = Stage # Event.cities.through master_key = 'event' class FeaturesByEvent(dd.Table): model = Event.features.through master_key = 'event' class Events(dd.Table): model = Event order_by = ['date']
def get_print_language(self): if settings.SITE.project_model is not None and self.project: return self.project.get_print_language() return self.user.language @classmethod def get_default_table(cls): return OneEvent @classmethod def on_analyze(cls,lino): cls.DISABLED_AUTO_FIELDS = dd.fields_list(cls, '''summary''') dd.update_field(Event,'user',verbose_name=_("Responsible user")) class EventDetail(dd.FormLayout): start = "start_date start_time" end = "end_date end_time" main = """ event_type summary user assigned_to start end #all_day #duration state room priority access_class transparent #rset owner created:20 modified:20 description GuestsByEvent outbox.MailsByController """ class EventInsert(EventDetail): main = """
#~ register_action = None #~ deregister_action = None def before_state_change(self, ar, old, new): if new.name == 'registered': if self.get_existing_auto_events().count() == 0: #~ ar.confirm("Booking has no events! Are you sure?") raise Warning("Booking has no events!") def after_ui_save(self, ar): super(Booking, self).after_ui_save(ar) if self.state.editable: self.update_reminders(ar) dd.update_field(Booking, 'contact_person', verbose_name=_("Contact person")) dd.update_field(Booking, 'company', verbose_name=_("Organizer")) dd.update_field(Booking, 'every_unit', default=Recurrencies.once) dd.update_field(Booking, 'every', default=1) class BookingDetail(dd.FormLayout): #~ start = "start_date start_time" #~ end = "end_date end_time" #~ freq = "every every_unit" #~ start end freq main = "general sales.InvoicingsByInvoiceable" general = dd.Panel(""" start_date start_time end_date end_time room event_type workflow_buttons max_events max_date every_unit every
def find_start_date(self, date): for i in range(7): if self.is_available_on(date): return date date += ONE_DAY return None def is_available_on(self, date): wd = date.isoweekday() # Monday:1, Tuesday:2 ... Sunday:7 wd = Weekdays.get_by_value(str(wd)) rv = getattr(self, wd.name) #~ logger.info('20130529 is_available_on(%s) -> %s -> %s',date,wd,rv) return rv dd.update_field(RecurrenceSet, 'start_date', default=datetime.date.today) class Reservation(RecurrenceSet, EventGenerator, dd.Registrable): class Meta: abstract = True room = dd.ForeignKey('cal.Room', blank=True, null=True) max_date = models.DateField( blank=True, null=True, verbose_name=_("Generate events until")) def update_cal_until(self): return self.max_date
# ~ return self.summary def update_cal_rset(self): return self def update_cal_from(self, ar): return self.start_date def update_cal_calendar(self): return self.event_type def update_cal_summary(self, i): return unicode(self) dd.update_field(RecurrentEvent, "every_unit", default=Recurrencies.yearly) class RecurrentEvents(dd.Table): """ The list of all :class:`Recurrence Sets <RecurrenceSet>`. """ model = "cal.RecurrentEvent" required = dd.required(user_groups="office", user_level="manager") column_names = "start_date end_date name every_unit event_type *" auto_fit_column_widths = True order_by = ["start_date"] insert_layout = """
dd.Hierarizable, dd.Controllable): """The model definition.""" class Meta: abstract = dd.is_abstract_model(__name__, 'Comment') verbose_name = _("Comment") verbose_name_plural = _("Comment") #~ text = dd.RichTextField(_("Text"),blank=True,format='html') text = dd.RichTextField(_("Text"), format='plain') def __unicode__(self): return u'%s #%s' % (self._meta.verbose_name, self.pk) dd.update_field(Comment, 'user', editable=False) class Comments(dd.Table): required = dd.required(user_level='admin') slave_grid_format = "summary" model = 'comments.Comment' insert_layout = dd.FormLayout(""" text """, window_size=(40, 10)) detail_layout = """ id user created modified owner text
return EnrolmentsByCourse.request( self, param_values=dict(state=EnrolmentStates.requested)) @dd.requestfield(_("Confirmed")) def confirmed(self, ar): return EnrolmentsByCourse.request( self, param_values=dict(state=EnrolmentStates.confirmed)) @dd.requestfield(_("Enrolments")) def enrolments(self, ar): return EnrolmentsByCourse.request(self) # customize fields coming from mixins to override their inherited # default verbose_names dd.update_field(Course, 'every_unit', default=models.NOT_PROVIDED) dd.update_field(Course, 'every', default=models.NOT_PROVIDED) if Course.FILL_EVENT_GUESTS: @dd.receiver(dd.post_save, sender=cal.Event, dispatch_uid="fill_event_guests_from_course") def fill_event_guests_from_course(sender=None, instance=None, **kw): #~ logger.info("20130528 fill_event_guests_from_course") if settings.SITE.loading_from_dump: return event = instance if event.is_user_modified(): return if event.is_fixed_state():
def on_analyze(cls, lino): cls.PRINTABLE_FIELDS = dd.fields_list( cls, "project company contact_person contact_role \ excerpt_type language \ user build_method", ) super(Excerpt, cls).on_analyze(lino) def disabled_fields(self, ar): if not self.build_time: return set() return self.PRINTABLE_FIELDS dd.update_field(Excerpt, "company", verbose_name=_("Recipient (Organization)")) dd.update_field(Excerpt, "contact_person", verbose_name=_("Recipient (Person)")) class ExcerptDetail(dd.FormLayout): main = """ id excerpt_type:25 project company contact_person contact_role user:10 language:8 owner build_method build_time preview """ class Excerpts(dd.Table): required = dd.required(user_groups="office", user_level="admin") label = _("Excerpts history")
remarks MembersByList """) class Member(ContactRelated, dd.Sequenced): class Meta: verbose_name = _("List Member") verbose_name_plural = _("List Members") list = dd.ForeignKey('lists.List') remark = models.CharField(_("Remark"), max_length=200, blank=True) dd.update_field(Member, 'contact_person', verbose_name=_("Person")) dd.update_field(Member, 'contact_role', verbose_name=_("Role")) class Members(dd.Table): required = dd.required(user_level='manager') model = 'lists.Member' class MembersByList(Members): master_key = 'list' order_by = ['seqno'] column_names = "seqno company contact_person contact_role remark" class MembersByPerson(Members):
#~ mixins.AutoUser.update_owned_instance(self,task) #~ contacts.PartnerDocument.update_owned_instance(self,task) #~ super(ContractBase,self).update_owned_instance(other) def get_mailable_type(self): return self.type #~ def get_person(self): #~ return self.project #~ person = property(get_person) def get_print_language(self): return self.language dd.update_field(Note, 'company', verbose_name=_("Recipient (Organization)")) dd.update_field(Note, 'contact_person', verbose_name=_("Recipient (Person)")) def html_text(s): return '<div class="htmlText">' + s + '</div>' class NoteDetail(dd.FormLayout): main = """ date:10 time event_type:25 type:25 subject project company contact_person contact_role id user:10 language:8 build_time body outbox.MailsByController """
Represents a physical person. """ class Meta(Person.Meta): verbose_name = _("Person") verbose_name_plural = _("Persons") #~ ordering = ['last_name','first_name'] def get_queryset(self, ar): return self.model.objects.select_related('country', 'city') def get_print_language(self): "Used by DirectPrintAction" return self.language dd.update_field(Person, 'first_name', blank=False) dd.update_field(Person, 'last_name', blank=False) class PersonDetail(PersonDetail): main = "general contact misc" general = dd.Panel(""" overview:20 general2:40 general3:40 contacts.RolesByPerson:20 households.MembersByPerson:40 \ humanlinks.LinksByHuman """, label=_("General")) general2 = """ title first_name:15 middle_name:15
class AttachmentsByController(Attachments): master_key = 'owner' MODULE_LABEL = _("Outbox") system = dd.resolve_app('system') def setup_main_menu(site, ui, profile, m): m = m.add_menu("office", system.OFFICE_MODULE_LABEL) m.add_action(MyOutbox) #~ def setup_config_menu(site,ui,user,m): #~ if user.level >= UserLevels.manager: #~ m = m.add_menu("outbox",MODULE_LABEL) #~ m.add_action(MailTypes) def setup_explorer_menu(site, ui, profile, m): #~ if user.level >= UserLevels.manager: m = m.add_menu("office", system.OFFICE_MODULE_LABEL) #~ m = m.add_menu("outbox",MODULE_LABEL) m.add_action(Mails) m.add_action(Attachments) dd.update_field(Mail, 'user', verbose_name=_("Sender"))
class Board(dd.BabelNamed, dd.DatePeriod): class Meta: verbose_name = _("Board") verbose_name_plural = _("Boards") def full_clean(self, *args, **kw): if not self.start_date: self.start_date = dd.today() super(Board, self).full_clean(*args, **kw) dd.update_field( Board, 'start_date', verbose_name=_("Works since"), null=False) dd.update_field(Board, 'end_date', verbose_name=_("Worked until")) class Boards(dd.Table): model = 'boards.Board' required = dd.required(user_level='admin', user_groups='office') column_names = 'name *' order_by = ["name"] insert_layout = """ name """ detail_layout = """
def find_start_date(self, date): if date is not None: for i in range(7): if self.is_available_on(date): return date date += ONE_DAY return None def is_available_on(self, date): wd = date.isoweekday() # Monday:1, Tuesday:2 ... Sunday:7 wd = Weekdays.get_by_value(str(wd)) rv = getattr(self, wd.name) #~ logger.info('20130529 is_available_on(%s) -> %s -> %s',date,wd,rv) return rv dd.update_field(RecurrenceSet, 'start_date', default=settings.SITE.today) class Reservation(RecurrenceSet, EventGenerator, dd.Registrable): class Meta: abstract = True room = dd.ForeignKey('cal.Room', blank=True, null=True) max_date = models.DateField( blank=True, null=True, verbose_name=_("Generate events until")) def update_cal_until(self): return self.max_date