Example #1
0
    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)
Example #2
0
    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')
Example #3
0
    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')
Example #4
0
    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')
Example #5
0
    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)