def get_agencies(cls, truncate=True): """ Get a list of agencies """ with Lock("agencies"): request_params = { 'command': 'agencyList', } agencies_xml, api_call = cls.request(request_params, 'agency') if not agencies_xml: return [] db.session.begin() if truncate: db.session.query(Agency).delete() agencies = [] for agency in agencies_xml: region = Region.get_or_create(db.session, title=agency.get('regionTitle')) a = Agency.get_or_create(db.session, tag=agency.get('tag'), title=agency.get('title'), short_title=agency.get('shortTitle'), region=region, api_call=api_call) agencies.append(a) db.session.commit() return agencies
def get_agencies(cls, truncate=True): """ Get a list of agencies """ with Lock("agencies"): request_params = { 'command': 'agencyList', } agencies_xml, api_call = cls.request(request_params, 'agency') if not agencies_xml: return [] db.session.begin() if truncate: db.session.query(Agency).delete() agencies = [] for agency in agencies_xml: region = Region.get_or_create(db.session, title=agency.get('regionTitle')) a = Agency.get_or_create(db.session, tag = agency.get('tag'), title = agency.get('title'), short_title = agency.get('shortTitle'), region = region, api_call = api_call) agencies.append(a) db.session.commit() return agencies
def agencyAuthController(): errorString = '' if ('agency' in session): return redirect(url_for('agency_panel')) if request.method == 'POST' and ('email' in request.form) and ('password' in request.form): if request.form['email'] and request.form['password']: hash = hashlib.sha256( request.form['password'].encode()).hexdigest().upper() currentUser = Agency.objects(email=request.form['email'], password=hash).first() if currentUser: if currentUser.active == 1: session['agency'] = currentUser return redirect(url_for('agency_panel')) else: errorString = "Your account is not active" else: errorString = "Wrong data, unable to execute login" else: errorString = "Please insert username and password" return render_template('auth/login_agency.html', errorString=errorString)
def tagcloud(request): # get agencies sorted by contract_value query = Agency.all().order("name") agencies = [] for agency in query: agency.weight = utils.tag_weight(agency.contract_value) agencies.append(agency) return render_to_response('tagcloud.html', { 'agencies': agencies })
def load_agencies(request, indexfile=""): #Open summary excelfile wbin = xlrd.open_workbook(indexfile) #Agencies sh_source = wbin.sheet_by_name(u'Agencies') for rownum in range(1,sh_source.nrows): row = sh_source.row_values(rownum) shortname = row[0] fullname = row[1] parentname = row[2] website = row[3] scraped = True newagency = Agency(shortname=shortname, name=fullname, parentname=parentname, website=website, notes="", scraped=scraped) newagency.save() return HttpResponse("Agency details loaded from file.")
def agencies_and_routes(self): all_routes = {} for agency in Agency.get_or_fetch().iteritems(): agency_tag = agency[0] agency_model_dict = agency[1].to_dict() agency_model_dict.setdefault("routes", []).append(Route.get_or_fetch(agency_tag)) all_routes[agency_tag] = agency_model_dict return formatter.JSON(all_routes)
def create_tables(): # delete old records Base.metadata.drop_all(engine) # Base.metadata.create_all(engine) # for agency in agencies: a = Agency(abbreviation=agency, full_name=agencies[agency]) session.add(a) session.commit()
def signup(username, password) -> Tuple[Agency, Signer_Impl]: try: signer = create_account(username, password) agency = Agency(username = username, password = password) contract_addr = deploy_contract("Agency", signer = signer) agency.contract_addr = contract_addr agency.account_addr = str(signer.keypair.address) agency.account_pub = str(signer.keypair.public_key) agency.account_priv = str(signer.keypair.private_key) privkey, pubkey = gen_rsakey() agency.envelope_pub = pubkey agency.envelope_priv = privkey managementAddr = db.session.query(Contracts).filter(Contracts.name == "Management").first().addr EngineerListAddr = db.session.query(Contracts).filter(Contracts.name == "EngineerList").first().addr creditAddr = db.session.query(Contracts).filter(Contracts.name == "Credit").first().addr call_contract(contract_addr, "Agency", "setEngListAddr", args = [to_checksum_address(EngineerListAddr)], signer = signer) call_contract(contract_addr, "Agency", "setCreditAddr", args = [to_checksum_address(creditAddr)], signer = signer) agency.engineer_list_addr = EngineerListAddr # call_contract2(managementAddr, "Management", "addAgency", # args = [ # username, # to_checksum_address(agency.account_addr), # to_checksum_address(agency.contract_addr), # agency.envelope_pub, "" ], signer = signer) call_contract(managementAddr, "Management", "addAgency", args = [ username, to_checksum_address(agency.account_addr), to_checksum_address(agency.contract_addr), agency.envelope_pub, ""], signer = signer) db.session.add(agency) db.session.commit() except Exception: traceback.print_exc() db.session.rollback() return None, None return agency, signer
def load_agencies(request, indexfile=""): #Open summary excelfile wbin = xlrd.open_workbook(indexfile) #Agencies sh_source = wbin.sheet_by_name(u'Agencies') for rownum in range(1, sh_source.nrows): row = sh_source.row_values(rownum) shortname = row[0] fullname = row[1] parentname = row[2] website = row[3] scraped = True newagency = Agency(shortname=shortname, name=fullname, parentname=parentname, website=website, notes="", scraped=scraped) newagency.save() return HttpResponse("Agency details loaded from file.")
def get(self): profile = Profile.get_or_create() assert profile is not None agencies = Agency.query(Agency.enabled == True) if agencies.count(limit=1) < 1: agencies = None context = dict( object_list=agencies, report_count=StopReport.query(StopReport.user == profile.key).count(limit=100), ) self.render_to_response('agency_list.html', context)
def get(self, agency_id): try: agency = Agency.get_by_id(int(agency_id)) if agency is None: return send_404(self) except: return send_404(self) agency_vehicle_types = list(agency.vehicle_types) agency_vehicle_types.sort() agency_vehicle_types = [(x, VEHICLE_TYPES[x]) for x in agency_vehicle_types] context = dict( agency_name=agency.name, vehicle_types=agency_vehicle_types, ) self.render_to_response('agency_detail.html', context)
def get(self, agency_id): user = users.get_current_user() if not user or not users.is_current_user_admin(): return try: agency = Agency.get_by_id(int(agency_id)) if agency is None: return self.send_404() except: return self.send_404() context = dict( agency_name=agency.name, vehicle_types=VEHICLE_TYPES.keys(), ) self.render_to_response('agency_stops_import.html', context)
def get(self, agency_id, vehicle): try: agency = Agency.get_by_id(int(agency_id)) if agency is None or vehicle not in VEHICLE_TYPES or vehicle not in agency.vehicle_types: return self.send_404() except: return self.send_404() # Check for known stops known_stops = list(Stop.query(Stop.stop_type == vehicle, Stop.agency == agency.key).order(Stop.name)) context = dict( agency_name=agency.name, agency_id=agency.key.id(), vehicle=vehicle, known_stops=known_stops, ) self.render_to_response('agency_report.html', context)
def post(self, agency_id): user = users.get_current_user() if not user or not users.is_current_user_admin(): return try: agency = Agency.get_by_id(int(agency_id)) if agency is None: return self.send_404() except: return self.send_404() vehicle_types = [x.strip().lower() for x in self.request.get('vehicle_types').split(',')] vehicle_types = [x for x in vehicle_types if x in VEHICLE_TYPES.keys()] agency.vehicle_types = vehicle_types agency.put() context = dict( agency_name=agency.name, agency=agency, vehicle_types=VEHICLE_TYPES.keys(), ) self.render_to_response('agency_edit.html', context)
def create(request): try: json_obj = commonHttp.get_json(request.body) req_attrs = [ expectedAttr["NAME"], expectedAttr["DESCRIPTION"], expectedAttr["SMS_CONTACT_NO"] ] commonHttp.check_keys(json_obj, req_attrs) new_agency = Agency( name=json_obj[expectedAttr["NAME"]], description=json_obj[expectedAttr["DESCRIPTION"]], sms_contact_no=json_obj[expectedAttr["SMS_CONTACT_NO"]]) commonHttp.save_model_obj(new_agency) response = JsonResponse({"id": new_agency.id, "success": True}) return response except commonHttp.HttpBadRequestException as e: return HttpResponseBadRequest(e.reason_phrase)
def contract_count(): agencies = Agency.all().fetch(200) count = 0 for agency in agencies: count += agency.contract_count return count
def agency(self, agency_tag): return formatter.JSON(Agency.properties(agency_tag))
def post(self, agency_id): user = users.get_current_user() if not user or not users.is_current_user_admin(): return try: agency = Agency.get_by_id(int(agency_id)) if agency is None: return self.send_404() except: return self.send_404() error_msg = None ok_msg = None # Process the upload upload = self.request.POST['upload'] if upload.file: upload_csv = csv.reader(upload.file) header = upload_csv.next() name_f = header.index('name') stop_type_f = header.index('stop_type') try: stop_id_f = header.index('stop_id') except: stop_id_f = None try: stop_code_f = header.index('stop_code') except: stop_code_f = None try: y_f = header.index('y') x_f = header.index('x') except: y_f = x_f = None # Start reading rows stop_count = 0 for row in upload_csv: name = row[name_f].strip() stop_type = row[stop_type_f].strip() if stop_type not in VEHICLE_TYPES.keys(): error_msg = 'stop type invalid (%r)' % (stop_type,) break try: stop_code = row[stop_code_f].strip() except: stop_code = None try: stop_id = row[stop_id_f].strip() except: stop_id = None try: x = float(row[x_f].strip()) y = float(row[y_f].strip()) except: x_f = y_f = None if x_f is not None: point = ndb.GeoPt(y, x) else: point = None stop = Stop( name=name, stop_type=stop_type, agency=agency.key, gtfs_stop_id=stop_id, gtfs_stop_code=stop_code, gtfs_point=point, ) stop.put() stop_count += 1 ok_msg = 'imported %d stop(s)' % stop_count else: error_msg = 'cannot open uploaded file' context = dict( agency_name=agency.name, vehicle_types=VEHICLE_TYPES.keys(), error_msg=error_msg, ok_msg=ok_msg, ) self.render_to_response('agency_stops_import.html', context)
def load_indicator_spreadsheet(request, indexfile=""): #Open summary excelfile wbin = xlrd.open_workbook(indexfile) #Agencies sh_source = wbin.sheet_by_name(u'Agencies') for rownum in range(1,sh_source.nrows): row = sh_source.row_values(rownum) shortname = row[0] fullname = row[1] parentname = row[2] website = row[3] scraped = True newagency = Agency(shortname=shortname, name=fullname, parentname=parentname, website=website, notes="", scraped=scraped) newagency.save() #Datasources sh_source = wbin.sheet_by_name(u'Datasources Used') for rownum in range(1,sh_source.nrows): row = sh_source.row_values(rownum) shortname = row[0] fullname = row[1] sourceagency = row[2] sourcefile = row[5] sourceurl = row[7] #FIXIT: should be the times when scrapers were run, not the date the file #was uploaded todaysdate = datetime.now() newsource = Datasource(shortname=shortname, name=fullname, notes="", url=sourceurl, dateadded=todaysdate, datechecked=todaysdate, scraper=True, localfile=sourcefile) newsource.save() sh_source = wbin.sheet_by_name(u'Suggested Sources') for rownum in range(1,sh_source.nrows): row = sh_source.row_values(rownum) shortname = row[0] fullname = row[1] sourceagency = row[2] sourceurl = row[3] newsource = Datasource(shortname=shortname, name=fullname, notes="", url=sourceurl, dateadded=todaysdate, datechecked=todaysdate, scraper=False, localfile="") newsource.save() #Indicators indicators = {} sh_ind = wbin.sheet_by_name(u'Indicators Needed') for rownum in range(1,sh_ind.nrows): row = sh_ind.row_values(rownum) indcode = row[0] indname = row[1] indicators[indcode] = indname ## newindicator = Indicator() ## newindicator.save() #Indicators in sources found = {} sh_found = wbin.sheet_by_name(u'Indicators Found') for rownum in range(1,sh_found.nrows): row = sh_found.row_values(rownum) sourcecode = row[0] indcode = row[1] csvheading = row[4] #Only process indicators that we have data for if not(csvheading == ""): if not(found.has_key(sourcecode)): found[sourcecode] = {} found[sourcecode][csvheading] = indcode ## newfound = foundIndicator(indicator=, datasource=, ## csvfile=, csvindname=, ## datasourceindname=, ## datasourcedesc=, notes=) ## newfound.save() return HttpResponse("Indicator details loaded from file.")
def employeeAgencyController(action=None, resourceId=None): #keep non-logged users outside if ('employee' not in session) or (session['employee']['superAdmin'] is not True): return redirect(url_for('backoffice_auth')) #check resourceId validity agencyData = None if resourceId is not None: if ObjectId.is_valid(str(resourceId)): agencyData = Agency.objects(id=ObjectId(str(resourceId))).first() if not agencyData: return render_template( '404.html', errorString="This Agency does not exist") else: return render_template('404.html', errorString="This AgencyID is not valid") errorString = '' agencyList = [] validationErrors = [] pageTitle = "" #switch action cases (add,edit,delete,list) if action == 'add' or action == 'edit': pageTitle = "Add Agency" if action == "add" else "Edit Agency" templatePath = 'agencies/add.html' if request.method == 'POST' and ('submit' in request.form): #validate username if 'email' in request.form: if not request.form['email']: validationErrors.append("Field email is empty") else: if not request.form['email'].find("@"): validationErrors.append( "Email field should contain at least one @") if action == 'add': if len(Agency.objects( email=request.form['email'])) > 0: validationErrors.append( "The email you've choose already exists") else: if len( Agency.objects( email=request.form['email'], email__ne=agencyData.email)) > 0: validationErrors.append( "The email you've choose already exists") else: validationErrors.append("Missing field email in request") #validate companyName if 'companyName' in request.form: if not request.form['companyName']: validationErrors.append("Field companyName is empty") else: validationErrors.append("Missing field companyName in request") #validate phone if 'phone' in request.form: if not request.form['phone']: validationErrors.append("Field phone is empty") else: validationErrors.append("Missing field phone in request") #validate phone if 'VAT' in request.form: if not request.form['VAT']: validationErrors.append("Field VAT is empty") else: validationErrors.append("Missing field VAT in request") city = '' district = '' address = '' if 'city' in request.form: city = request.form['city'] if 'district' in request.form: district = request.form['district'] if 'address' in request.form: address = request.form['address'] #validate password if 'password' in request.form: if not request.form['password']: if (action == 'edit'): hash = agencyData.password #keep old password else: validationErrors.append("Field password is empty") else: if len(request.form['password']) < 8: validationErrors.append( "Password field should be min. 8 chars") else: hash = hashlib.sha256(request.form['password'].encode( )).hexdigest().upper() #make new hash else: validationErrors.append("Missing field password in request") #validate active if len(validationErrors) == 0: #save if action == 'add': result = Agency( companyName=str(request.form['companyName']), city=str(city), district=str(district), address=str(address), email=str(request.form['email']), phone=str(request.form['phone']), profitRate=float(request.form['profitRate']), VAT=str(request.form['VAT']), password=hash, active=(True if int(request.form['active']) == 1 else False)).save() if result: lastAgency = Agency.objects( email=request.form['email']).first() return redirect( url_for('agencies', action='edit', resourceId=lastAgency.id)) else: validationErrors.append("Unable to write this record") else: result = Agency.objects(email=agencyData['email']).update( companyName=str(request.form['companyName']), city=str(city), district=str(district), address=str(address), email=str(request.form['email']), phone=str(request.form['phone']), profitRate=float(request.form['profitRate']), VAT=str(request.form['VAT']), password=hash, active=(True if int(request.form['active']) == 1 else False)) return redirect( url_for('agencies', action='edit', resourceId=resourceId)) else: errorString = '|'.join(validationErrors) elif action == 'delete': pageTitle = "Agencies" templatePath = 'agencies/list.html' Agency.objects(id=ObjectId(str(resourceId))).delete() agencyList = Agency.objects().order_by('companyName') else: pageTitle = "Agencies" templatePath = 'agencies/list.html' agencyList = Agency.objects().order_by('companyName') return render_template(templatePath, pageTitle=pageTitle, employee=session['employee'], userType='employee', errorString=errorString, agencyList=agencyList, agencyData=agencyData, action=action, resourceId=resourceId)
def load_indicator_spreadsheet(request, indexfile=""): #Open summary excelfile wbin = xlrd.open_workbook(indexfile) #Agencies sh_source = wbin.sheet_by_name(u'Agencies') for rownum in range(1, sh_source.nrows): row = sh_source.row_values(rownum) shortname = row[0] fullname = row[1] parentname = row[2] website = row[3] scraped = True newagency = Agency(shortname=shortname, name=fullname, parentname=parentname, website=website, notes="", scraped=scraped) newagency.save() #Datasources sh_source = wbin.sheet_by_name(u'Datasources Used') for rownum in range(1, sh_source.nrows): row = sh_source.row_values(rownum) shortname = row[0] fullname = row[1] sourceagency = row[2] sourcefile = row[5] sourceurl = row[7] #FIXIT: should be the times when scrapers were run, not the date the file #was uploaded todaysdate = datetime.now() newsource = Datasource(shortname=shortname, name=fullname, notes="", url=sourceurl, dateadded=todaysdate, datechecked=todaysdate, scraper=True, localfile=sourcefile) newsource.save() sh_source = wbin.sheet_by_name(u'Suggested Sources') for rownum in range(1, sh_source.nrows): row = sh_source.row_values(rownum) shortname = row[0] fullname = row[1] sourceagency = row[2] sourceurl = row[3] newsource = Datasource(shortname=shortname, name=fullname, notes="", url=sourceurl, dateadded=todaysdate, datechecked=todaysdate, scraper=False, localfile="") newsource.save() #Indicators indicators = {} sh_ind = wbin.sheet_by_name(u'Indicators Needed') for rownum in range(1, sh_ind.nrows): row = sh_ind.row_values(rownum) indcode = row[0] indname = row[1] indicators[indcode] = indname ## newindicator = Indicator() ## newindicator.save() #Indicators in sources found = {} sh_found = wbin.sheet_by_name(u'Indicators Found') for rownum in range(1, sh_found.nrows): row = sh_found.row_values(rownum) sourcecode = row[0] indcode = row[1] csvheading = row[4] #Only process indicators that we have data for if not (csvheading == ""): if not (found.has_key(sourcecode)): found[sourcecode] = {} found[sourcecode][csvheading] = indcode ## newfound = foundIndicator(indicator=, datasource=, ## csvfile=, csvindname=, ## datasourceindname=, ## datasourcedesc=, notes=) ## newfound.save() return HttpResponse("Indicator details loaded from file.")
def tagcloud(request): # get agencies sorted by contract_value agencies = Agency.all().order("name").fetch(200) return render_to_response('tagcloud.html', { 'agencies': agencies })
def agencies(self): return formatter.JSON(Agency.get_or_fetch())
def post(self): profile = Profile.get_or_create() assert profile is not None agency_id = self.request.get('agency_id') vehicle = self.request.get('vehicle') card_id = self.request.get('card_id') known_stop = self.request.get('known_stop') stop_name = self.request.get('stop_name') comment = self.request.get('comment') # Start validation! # Check agency try: agency = Agency.get_by_id(int(agency_id)) if agency is None or not agency.enabled: # Invalid agency return self.send_404() except: return self.send_404() # Check vehicle type if vehicle not in VEHICLE_TYPES or vehicle not in agency.vehicle_types: return self.send_404() # Check card id try: card_id = int(card_id) except: # invalid card id, not a number. return self._retry_form(agency, vehicle, card_id, known_stop, stop_name, comment, 'Card ID is not a number') # Check known_stop if known_stop != '': try: known_stop = Stop.get_by_id(int(known_stop)) if known_stop.agency.id() != agency.key.id(): # stop is not for agency known_stop = None except: known_stop = None if known_stop is None: # Invalid stop return self._retry_form(agency, vehicle, card_id, known_stop, stop_name, comment, 'Stop ID is not valid') if known_stop == '': known_stop = None # Check stop_name is present if known_stop is not if known_stop is None and stop_name == '': # Custom name not specified and no known stop selected. return self._retry_form(agency, vehicle, card_id, known_stop, stop_name, comment, 'No stop name was entered') # If the user is banned, then say we processed the report, but don't # actually store it anywhere. if not profile.banned: # Now get the extra metadata and make the report country = self.request.headers.get('x-appengine-country', 'XX') region = self.request.headers.get('x-appengine-region', '') city = self.request.headers.get('x-appengine-city', '') ip = self.request.remote_addr report = StopReport( agency=agency.key, stop=known_stop.key if known_stop else None, name=stop_name, stop_type=vehicle, card_id=str(card_id), comment=comment, gae_country=country, gae_region=region, gae_city=city, gae_ip=ip, user=profile.key ) report.put() context = dict( agency_name=agency.name, agency_id=agency.key.id(), ) self.render_to_response('report_sent.html', context)
def construct_Agency(): agency_list = [Agency(name = u_agency) for u_agency in list(set([row['agency'] for index, row in complete_data2.iterrows()]))] db.session.add_all(agency_list) db.session.commit()
def agencyReservationController(action=None, resourceId=None, config={}): #keep non-logged users outside if ('agency' not in session): return redirect(url_for('agency_auth')) #check resourceId validity reservationData = None if resourceId: if ObjectId.is_valid(str(resourceId)): reservationData = Reservation.objects( id=ObjectId(str(resourceId)), agency=ObjectId(str( session['agency']['_id']['$oid']))).first() if not reservationData: return render_template( '404.html', errorString="This Reservation does not exist") else: if str(session['agency']['_id']['$oid']) != str( reservationData.agency): return render_template( '404.html', errorString="You do not have access to this page") else: return render_template('404.html', errorString="This ParkingID is not valid") errorString = '' parkingList = [] validationErrors = [] pageTitle = "" reservationList = [] agencyList = [] counters = {"reservations": 0, "earned": 0, "agencyProfit": 0} #switch action cases (add,edit,delete,list) if action == 'add' or action == 'edit': pageTitle = "Add Reservation" if action == "add" else "Edit Reservation" templatePath = 'reservations/add_agency.html' parkingList = Parking.objects().order_by('name') if request.method == 'POST' and ('submit' in request.form): #return render_template("404.html",errorString=datetime.strptime("2019-02-01 15:26", '%Y-%m-%d %H:%M').isoformat()) #validation #validate name if 'name' in request.form: if not request.form['name']: validationErrors.append("Field name is empty") else: validationErrors.append("Missing field name in request") #validate surname if 'surname' in request.form: if not request.form['surname']: validationErrors.append("Field surname is empty") else: validationErrors.append("Missing field surname in request") #validate email if 'email' in request.form: if not request.form['email'] or not request.form['email'].find( "@"): validationErrors.append("Field email is empty or invalid") else: validationErrors.append("Missing field email in request") #validate parking relatedParking = None if 'parking' in request.form: #request.form['relatedParking'] if request.form['parking'] and ObjectId.is_valid( str(request.form['parking'])): if not Parking.objects( id=ObjectId(str(request.form['parking']))).first(): validationErrors.append( "The parking you are referencing is not existing") else: relatedParking = ObjectId(str(request.form['parking'])) else: validationErrors.append( "The parking you are referencing is not valid") else: validationErrors.append("Missing parking reference in request") #validate agency relatedAgency = ObjectId(session['agency']['_id']['$oid']) #validate dates fromDate = None toDate = None if 'fromDate' in request.form: if not request.form['fromDate']: validationErrors.append("Field fromDate is empty") else: try: fromDate = datetime.strptime(request.form['fromDate'], '%Y-%m-%d %H:%M') except: validationErrors.append("Field fromDate is empty") else: validationErrors.append("Missing field fromDate in request") if 'toDate' in request.form: if not request.form['toDate']: validationErrors.append("Field toDate is empty") else: try: toDate = datetime.strptime(request.form['toDate'], '%Y-%m-%d %H:%M') except: validationErrors.append("Field toDate is empty") else: validationErrors.append("Missing field fromDate in request") #non-mandatory fields model = "" plate = "" type = "car" paymentType = "online" amount = 0 agencyProfit = 0 if 'model' in request.form: model = request.form['model'] if 'plate' in request.form: plate = request.form['plate'] if 'type' in request.form: type = ("car" if str(request.form['type']) == "car" else "moto") if 'paymentType' in request.form: paymentType = ("online" if str(request.form['paymentType']) == "online" else "onsite") if fromDate and toDate: #check date difference dateDiff = toDate - fromDate reservationHours = dateDiff.total_seconds() / 3600 if reservationHours <= 0: validationErrors.append( "Distance between starting and ending date should be 1 hour" ) if len(validationErrors) == 0: #proceed calculating amount and (if needed) agencyProfit selectedParking = Parking.objects(id=relatedParking).first() amount = decimal.Decimal( reservationHours) * selectedParking['pricePerHour'] if relatedAgency: #calc profit selectedAgency = Agency.objects(id=relatedAgency).first() agencyProfit = selectedAgency['profitRate'] * amount / 100 if action == 'add': executionDate = datetime.now() result = Reservation( status="CONFIRMED", user={ 'name': request.form['name'], 'surname': request.form['surname'], 'email': request.form['email'], 'model': model, 'plate': plate, 'type': type }, fromDate=fromDate.isoformat(), toDate=toDate.isoformat(), parking=relatedParking, amount=amount, paymentType=paymentType, agencyProfit=agencyProfit, agency=relatedAgency, executionDate=executionDate.isoformat()).save() if result: try: server = smtplib.SMTP( config['SMTP_CONFIG']['HOST'], config['SMTP_CONFIG']['PORT']) server.starttls() server.login(config['SMTP_CONFIG']['LOGIN'], config['SMTP_CONFIG']['PASSWORD']) to = str(request.form['email']) msg = MIMEMultipart() msg['From'] = config['SMTP_CONFIG']['SEND_FROM'] msg['To'] = to msg['Subject'] = "Well done! Parking reservation confirm" body = "<p>Dear " + escape( request.form['name'] + " " + request.form['surname'] ) + ",<br>this is your booking:<ul>\ <li>Code : " + str(result.id) + "</li>\ <li>Execution : " + executionDate.strftime( '%d/%m/%Y %H:%M') + "</li>\ <li>From : " + fromDate.strftime( '%d/%m/%Y %H:%M') + "</li>\ <li>To : " + toDate.strftime( '%d/%m/%Y %H:%M') + "</li>\ <li>Amount : €" + str(amount) + "</li>\ <li>Parking : " + escape(str( selectedParking.name)) + "</li>\ <li>Parking Address : " + escape( str(selectedParking.address) + "," + str(selectedParking.city) + " " + str(selectedParking. district)) + "</li>\ </ul><br><br>Best regards,<br><b>eparkingsystem</b></p>\ " msg.attach(MIMEText(body, 'html')) text = msg.as_string() server.sendmail(config['SMTP_CONFIG']['SEND_FROM'], to, text) server.quit() except: pass return redirect(url_for('agency_reservations')) else: validationErrors.append("Unable to write this record") else: result = Reservation.objects( id=ObjectId(str(resourceId))).update( status="CONFIRMED", user={ 'name': request.form['name'], 'surname': request.form['surname'], 'email': request.form['email'], 'model': model, 'plate': plate, 'type': type }, fromDate=fromDate.isoformat(), toDate=toDate.isoformat(), parking=relatedParking, amount=amount, paymentType=paymentType, agencyProfit=agencyProfit, agency=relatedAgency, executionDate=datetime.now().isoformat()) return redirect( url_for('agency_reservations', action='edit', resourceId=resourceId)) else: errorString = '|'.join(validationErrors) elif action == 'delete': Reservation.objects( id=ObjectId(str(resourceId)), agency=ObjectId(str(session['agency']['_id']['$oid']))).delete() return redirect(url_for('agency_reservations')) else: pageTitle = "Reservations" templatePath = 'reservations/list.html' objectList = Reservation.objects(agency=ObjectId( str(session['agency']['_id']['$oid']))).order_by("-executionDate") reservationList = objectList.aggregate(*[{ "$lookup": { "from": "parkings", "localField": "parking", "foreignField": "_id", "as": "parkingData" } }, { "$lookup": { "from": "agencies", "localField": "agency", "foreignField": "_id", "as": "agencyData" } }, { "$unwind": "$parkingData" }, { "$unwind": "$agencyData" }, { "$project": { "_id": 1, "status": 1, "user": 1, "fromDate": 1, "toDate": 1, "parking": 1, "amount": 1, "paymentType": 1, "agencyProfit": 1, "agency": 1, "executionDate": 1, "parkingName": "$parkingData.name", "agencyCompanyName": "$agencyData.companyName", } }]) #get counters value counters['reservations'] = objectList.count() counters['agencyProfit'] = 0 counters['earned'] = objectList.sum("agencyProfit") return render_template(templatePath, pageTitle=pageTitle, agency=session['agency'], userType='agency', errorString=errorString, parkingList=parkingList, agencyList=agencyList, reservationList=reservationList, reservationData=reservationData, action=action, resourceId=resourceId, counters=counters)
def _create_agency(agency_data, source_application): agency = Agency() agency.build(agency_data) agency.source_application = source_application return agency.find_or_create()