def update_group_sheets(self, vgroup_id='', tag_sheet=None, eat_sheet=None, live_sheet=None, saveButton=''): # todo: accessor function making sure the type really is visiting_group visiting_group_o = holly_couch[vgroup_id] visiting_group_properties = visiting_group_o['visiting_group_properties'] if eat_sheet != None: visiting_group_o['vodb_eat_sheet'] = json.loads(eat_sheet) if live_sheet != None: visiting_group_o['vodb_live_sheet'] = json.loads(live_sheet) if tag_sheet != None: vodb_tag_sheet = json.loads(tag_sheet) visiting_group_o['vodb_tag_sheet'] = vodb_tag_sheet vodb_tag_times_tags = computeAllUsedVisitingGroupsTagsForTagSheet(visiting_group_o['tags'], vodb_tag_sheet['items']) #self.vodb_sheet_property_substitution(visiting_group_o, vodb_eat_times_options, visiting_group_properties, 'vodb_eat_sheet') #self.vodb_sheet_property_substitution(visiting_group_o, vodb_live_times_options, visiting_group_properties, 'vodb_live_sheet') #self.vodb_sheet_property_substitution(visiting_group_o, vodb_tag_times_tags, visiting_group_properties, 'vodb_tag_sheet') updateVisitingGroupComputedSheets(visiting_group_o, visiting_group_properties, sheet_map=dict(vodb_eat_sheet=vodb_eat_times_options, vodb_live_sheet=vodb_live_times_options, vodb_tag_sheet=vodb_tag_times_tags)) holly_couch[vgroup_id] = visiting_group_o raise redirect(request.referrer)
def save_vodb_group_properties(self, _id='', boknr='', name='', info='', camping_location='', vodb_contact_name='', vodb_contact_phone='', vodb_contact_email='', vodb_contact_address='', from_date='', to_date='', subtype='', visiting_group_properties=None): #...how do we handle new groups? Like new visiting_group, right? # better have type=visiting_group for all groups and then have subtypes=group, course, daytrip, funk, etc for filtering/deciding on additional capabillities id = _id is_new, vgroup_id = self.newOrExistingVgroupId(id) #...load or create new vgroup if is_new: # program_state = 0 # vodb_state = 0 if not subtype in ['program','course','staff']: tg.flash('error with subtype') raise redirect(request.referrer) visiting_group_o = dict(type='visiting_group', subtype=subtype, tags=[], boknstatus=0, vodbstatus=0) else: visiting_group_o = holly_couch[vgroup_id] #...fill in data visiting_group_o['name'] = name visiting_group_o['info'] = info visiting_group_o['from_date'] = str(from_date) visiting_group_o['to_date'] = str(to_date) visiting_group_o['vodb_contact_name'] = vodb_contact_name visiting_group_o['vodb_contact_email'] = vodb_contact_email visiting_group_o['vodb_contact_phone'] = vodb_contact_phone visiting_group_o['vodb_contact_address'] = vodb_contact_address visiting_group_o['boknr'] = boknr # if is_new: # visiting_group_o['boknstatus'] = program_state # visiting_group_o['vodbstatus'] = vodb_state visiting_group_o['camping_location'] = camping_location # TODO: figure out the order of updating things if something goes wrong. #...update properties visiting_group_o['visiting_group_properties'] = populatePropertiesAndRemoveUnusedProperties(visiting_group_o, visiting_group_properties) updateBookingsCacheContentAfterPropertyChange(holly_couch, visiting_group_o, getLoggedInUserId(request)) vodb_tag_times_tags = computeAllUsedVisitingGroupsTagsForTagSheet(visiting_group_o['tags'], visiting_group_o.get('vodb_tag_sheet',dict(items=[]))['items']) updateVisitingGroupComputedSheets(visiting_group_o, visiting_group_o['visiting_group_properties'], sheet_map=dict(vodb_eat_sheet=vodb_eat_times_options, vodb_live_sheet=vodb_live_times_options, vodb_tag_sheet=vodb_tag_times_tags)) holly_couch[vgroup_id] = visiting_group_o if visiting_group_o.has_key('_id'): raise redirect('/vodb_group/view_vodb_group?visiting_group_id='+visiting_group_o['_id']) raise redirect('/vodb_group/view_all')
def save_vodb_group_properties(self, vodb_group_id='', boknr='', name='', info='', camping_location='', vodb_contact_name='', vodb_contact_phone='', vodb_contact_email='', vodb_contact_address='', from_date='', to_date='', subtype='', visiting_group_properties=None): ensurePostRequest(request, __name__) log.debug('save_vodb_group_properties') id = vodb_group_id is_new, vgroup_id = self.newOrExistingVgroupId(id) #...load or create new vgroup if is_new: log.info("saving new group") # program_state = 0 # vodb_state = 0 if not subtype in ['program','course','staff']: flash('error with subtype') raise redirect(request.referrer) visiting_group_o = dict(type='visiting_group', subtype=subtype, tags=[], boknstatus=0, vodbstatus=0) else: visiting_group_o = holly_couch[vgroup_id] #...fill in data visiting_group_o['name'] = name visiting_group_o['info'] = cleanHtml(info) visiting_group_o['from_date'] = sanitizeDate(from_date)[1] # TODO better error handling visiting_group_o['to_date'] = sanitizeDate(to_date)[1] # TODO better error handling visiting_group_o['vodb_contact_name'] = vodb_contact_name visiting_group_o['vodb_contact_email'] = vodb_contact_email visiting_group_o['vodb_contact_phone'] = vodb_contact_phone visiting_group_o['vodb_contact_address'] = vodb_contact_address visiting_group_o['boknr'] = boknr visiting_group_o['camping_location'] = camping_location # TODO: figure out the order of updating things if something goes wrong. #...update properties visiting_group_o['visiting_group_properties'] = populatePropertiesAndRemoveUnusedProperties(visiting_group_o, visiting_group_properties) updateBookingsCacheContentAfterPropertyChange(holly_couch, visiting_group_o, getLoggedInUserId(request)) vodb_tag_times_tags = computeAllUsedVisitingGroupsTagsForTagSheet(visiting_group_o['tags'], visiting_group_o.get('vodb_tag_sheet',dict(items=[]))['items']) updateVisitingGroupComputedSheets(visiting_group_o, visiting_group_o['visiting_group_properties'], sheet_map=dict(vodb_eat_sheet=vodb_eat_times_options, vodb_live_sheet=vodb_live_times_options, vodb_tag_sheet=vodb_tag_times_tags)) holly_couch[vgroup_id] = visiting_group_o if visiting_group_o.has_key('_id'): raise redirect('/vodb_group/view_vodb_group?visiting_group_id='+visiting_group_o['_id']) raise redirect('/vodb_group/view_all')
def save_visiting_group_properties(self, visiting_group_id=None, name='', info='', from_date=None, to_date=None, contact_person='', contact_person_email='', contact_person_phone='', visiting_group_properties=None, camping_location='', boknr='', password='', subtype=''): log.info('save_visiting_group_properties') ensurePostRequest(request, __name__) is_new = ((None == visiting_group_id) or (visiting_group_id == '')) #...this is a hack so we can direct the id of the visiting group for special groups if not is_new: if 'visiting_group' not in visiting_group_id: is_new = True id_c = 'visiting_group.'+visiting_group_id else: id_c = genUID(type='visiting_group') if is_new: # TODO: make sure subtype is in one of if not subtype in ['program','course','staff']: flash('error with subtype') raise redirect(request.referrer) visiting_group_c = dict(type='visiting_group', subtype=subtype, tags=[], boknstatus=0, vodbstatus=0) #...populate sheets and computed sheets? else: id_c = visiting_group_id visiting_group_c = holly_couch[id_c] #visiting_group_c['type'] = 'visiting_group' visiting_group_c['name'] = name visiting_group_c['info'] = cleanHtml(info) ok, ok_from_date = sanitizeDate(from_date) if not ok: # TODO better error handling here flash('error with from-date') raise redirect(request.referrer) visiting_group_c['from_date'] = ok_from_date ok, ok_to_date = sanitizeDate(to_date) if not ok: # TODO: better error handling here flash('error with to-date') raise redirect(request.referrer) visiting_group_c['to_date'] = ok_to_date visiting_group_c['contact_person'] = contact_person visiting_group_c['contact_person_email'] = contact_person_email visiting_group_c['contact_person_phone'] = contact_person_phone # TODO: boknr maybe shouldnt be changeble if program or vodb state has passed by preliminary (10) ? visiting_group_c['boknr'] = boknr # TODO: password for group should be set in special page if password != '': visiting_group_c['password'] = password visiting_group_c['camping_location'] = camping_location #...now we have to update all cached content, so we need all bookings that belong to this visiting group visiting_group_c['visiting_group_properties'] = populatePropertiesAndRemoveUnusedProperties(visiting_group_c, visiting_group_properties) updateBookingsCacheContentAfterPropertyChange(holly_couch, visiting_group_c, getLoggedInUserId(request)) vodb_tag_times_tags = computeAllUsedVisitingGroupsTagsForTagSheet(visiting_group_c['tags'], visiting_group_c.get('vodb_tag_sheet',dict(items=[]))['items']) updateVisitingGroupComputedSheets(visiting_group_c, visiting_group_c['visiting_group_properties'], sheet_map=dict(vodb_eat_sheet=vodb_eat_times_options, vodb_live_sheet=vodb_live_times_options, vodb_tag_sheet=vodb_tag_times_tags)) holly_couch[id_c] = visiting_group_c if visiting_group_c.has_key('visiting_group_id'): raise redirect('/visiting_group/show_visiting_group?visiting_group_id='+visiting_group_c['visiting_group_id']) raise redirect('/visiting_group/view_all')
def create_calculation_schema(self, visiting_group_id=None, live='outdoor', change_schema='live'): # todo: accessor function making sure the type really is visiting_group visiting_group_o = holly_couch[visiting_group_id] visiting_group_properties = visiting_group_o['visiting_group_properties'] time_row_schema = [] is_changing_live_sheet = False is_changing_eat_sheet = False if change_schema == 'live': time_row_schema = ['fm', 'em', 'evening'] is_changing_live_sheet = True elif change_schema == 'eat': # this one is more tricky since we dont want to have arrival and departure data set every day. time_row_schema = ['breakfast', 'lunch', 'lunch_arrive', 'lunch_depart', 'dinner'] is_changing_eat_sheet = True # try create a live sheet for indoor living for the whole of the groups stay....fm em kvall # then try att use only properties that is within the stated range. from_date = visiting_group_o['from_date'] to_date = visiting_group_o['to_date'] rows=[] new_live_sheet = dict(identifier='rid', items=rows) for tmp_date in self.dateGen(from_date, to_date): i=0 for t in time_row_schema: i += 1 #...figure out properties in range. prop_str_list = [] for tmp_prop in visiting_group_properties.values(): if tmp_prop['from_date'] <= tmp_date and tmp_prop['to_date'] >= tmp_date: prop_str_list.append('$'+tmp_prop['property']) tmp_r = dict(date=tmp_date, time=t, indoor=0, outdoor=0, daytrip=0, rid=tmp_date+'_'+str(i)) if t not in ['lunch_arrive', 'lunch_depart']: tmp_r[live] = '+'.join(prop_str_list) else: tmp_r[live] = 0 rows.append(tmp_r) rows[0][live] = 0 rows[-2][live] = 0 rows[-1][live] = 0 if is_changing_eat_sheet: visiting_group_o['vodb_eat_sheet'] = new_live_sheet elif is_changing_live_sheet: visiting_group_o['vodb_live_sheet'] = new_live_sheet #if eat_sheet != None: # visiting_group_o['vodb_eat_sheet'] = json.loads(eat_sheet) #if live_sheet != None: # visiting_group_o['vodb_live_sheet'] = json.loads(live_sheet) vodb_tag_times_tags = computeAllUsedVisitingGroupsTagsForTagSheet(visiting_group_o['tags'], visiting_group_o['vodb_tag_sheet']['items']) updateVisitingGroupComputedSheets(visiting_group_o, visiting_group_properties, sheet_map=dict(vodb_eat_sheet=vodb_eat_times_options, vodb_live_sheet=vodb_live_times_options, vodb_tag_sheet=vodb_tag_times_tags)) holly_couch[visiting_group_id] = visiting_group_o raise redirect(request.referrer)