def handle(self, *args, **options): try: leadList = Lead.objects.all() except leadList.DoesNotExist: raise CommandError('leadList does not exist') for lead in leadList: if lead.fed_everyday: lead_copy = Lead( #not so good solution needed to copy and register a unique field email="id_%s_of_%s_%s" % (lead.id, uuid.uuid4(), lead.email), food=lead.food, kindoffood=lead.kindoffood, how_much_food=lead.how_much_food, measure=lead.measure, how_many_ducks=lead.how_many_ducks, fed_time=lead.fed_time, #avoids false data progression fed_everyday=False, address=lead.address, geolocation=lead.geolocation, created_at=time.strftime("%d-%m-%Y-%H-%M-%S")) lead_copy.save() self.stdout.write( self.style.SUCCESS('Successfully copied Lead "%s"' % lead.id))
def create_lead_from_file(validated_rows, invalid_rows, user_id, source): """Parameters : validated_rows, invalid_rows, user_id. This function is used to create leads from a given file. """ email_regex = '^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$' user = User.objects.get(id=user_id) for row in validated_rows: if not Lead.objects.filter(title=row.get('title')).exists(): if re.match(email_regex, row.get('email')) is not None: try: lead = Lead() lead.title = row.get('title', '')[:64] lead.first_name = row.get('first name', '')[:255] lead.last_name = row.get('last name', '')[:255] lead.website = row.get('website', '')[:255] lead.email = row.get('email', '') lead.phone = row.get('phone', '') lead.address_line = row.get('address', '')[:255] lead.city = row.get('city', '')[:255] lead.state = row.get('state', '')[:255] lead.postcode = row.get('postcode', '')[:64] lead.country = row.get('country', '')[:3] lead.description = row.get('description', '') lead.status = row.get('status', '') lead.account_name = row.get('account_name', '')[:255] lead.created_from_site = False lead.created_by = user lead.save() except e: print(e)
def create_lead_from_file(validated_rows, invalid_rows, user_id, source, company_id): """Parameters : validated_rows, invalid_rows, user_id. This function is used to create leads from a given file. """ email_regex = "^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$" user = User.objects.get(id=user_id) company = Company.objects.filter(id=company_id).first() for row in validated_rows: if not Lead.objects.filter(title=row.get("title")).exists(): if re.match(email_regex, row.get("email")) is not None: try: lead = Lead() lead.title = row.get("title", "")[:64] lead.first_name = row.get("first name", "")[:255] lead.last_name = row.get("last name", "")[:255] lead.website = row.get("website", "")[:255] lead.email = row.get("email", "") lead.phone = row.get("phone", "") lead.address_line = row.get("address", "")[:255] lead.city = row.get("city", "")[:255] lead.state = row.get("state", "")[:255] lead.postcode = row.get("postcode", "")[:64] lead.country = row.get("country", "")[:3] lead.description = row.get("description", "") lead.status = row.get("status", "") lead.account_name = row.get("account_name", "")[:255] lead.created_from_site = False lead.created_by = user lead.company = company lead.save() except Exception as e: print(e)
def write_to_database(self, lead_info, company_id): name = ' '.join(lead_info['name']) phone_number = lead_info['phone'][0] email = lead_info['lead_email'] renter_brand = lead_info['renterBrand'][0] date_of_inquiry = lead_info['date_of_inquiry'] sent_text_date = lead_info['sent_text_date'] sent_email_date = lead_info['sent_email_date'] company = Company.objects.get(pk=int(company_id)) # Write to table lead = Lead( name=name, phone_number=phone_number, email=email, renter_brand=renter_brand, sent_text_date=sent_text_date, sent_email_date=sent_email_date, date_of_inquiry=date_of_inquiry, company=company, ) lead.save() # Add 'written_to_database' key to lead_info dict with value of True after lead has been written to database lead_info['written_to_database'] = True
def contact_page(request): if request.method == 'POST': form = LeadForm(request.POST) if form.is_valid(): new_lead = Lead() new_lead.name = request.POST.get('name', '') new_lead.subject = request.POST.get('subject', '') new_lead.email = request.POST.get('email', '') new_lead.message = request.POST.get('message', '') new_lead.save() messages.success( request, '{}, Your message was delivered!'.format(new_lead.name)) else: messages.error(request, 'Something is going wrong! Try again!') form = LeadForm() print(form) context = {'form': form} return render(request, 'leads/contact.html', context=context)
def create(self, validated_data): lead_object = Lead(status=LeadStage.objects.filter(id=1).first(), **validated_data) lead_object.save() lead_object.assigned_to.set([assign_salesperson()]) lead_object.save() try: eventlog_obj = EventLog(event_lead=lead_object, event_type="New Lead", salesperson=lead_object.assigned_to, manager=manager) except: eventlog_obj = EventLog( event_lead=lead_object, event_type="New Lead", salesperson=SalesPersonUser.objects.get(pk=1), manager=SalesPersonUser.objects.get(pk=1)) print("about to send mail") send_mail( 'Testing', 'New Lead', '*****@*****.**', ['*****@*****.**'], fail_silently=False, ) return lead_object
def form_valid(self,form,*args): try: lead = Lead(**form.cleaned_data) lead.save()#создание объекта связи, если форма валидна except: messages.error(self.request, "Сообщение не передано") else: messages.success(self.request, "Сообщение передано, ждите ответа") return super().form_valid(form,*args)
def save_new_jobs(): print("hello 2") json_data = get_jobs_json() now = datetime.utcnow() today_data = True LEAD_SKILLS = Lead.LEAD_SKILLS if json_data is not None: for job in json_data: try: date_difference = now - datetime.strptime( job["created_at"], "%a %b %d %H:%M:%S %Z %Y") print("Days", date_difference.days) if date_difference.days == 0: new_job = Lead() new_job.author = "Github Jobs" new_job.developer = True new_job.description = job["description"] new_job.skills = () # remove all html tags, and keep only lowercase and uppercase characters. # then keep only shared words between skills list and pure text from description. shared = set(x for x, _ in LEAD_SKILLS) & set( list( re.sub( r"<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});|[^a-zA-Z]", " ", new_job.description).upper().split())) for item in shared: new_job.skills += (item, ) new_job.how_to_apply = job["how_to_apply"] new_job.author = "Github Jobs" if job["type"] == "Full Time": new_job.job_type = 'Full-time' elif job["type"] == "Contract": new_job.job_type = 'Contract' new_job.title = job["title"] new_job.company = job["company"] application_url = re.search( r"http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+", job["how_to_apply"]) new_job.application_link = application_url[0] new_job.user_author = get_user_model().objects.get( pk='f3ee3abe-a186-44da-9ed2-b18ec3b570b7') new_job.remote = 'Remote' new_job.role = 'Developer' new_job.save() print('SUCCESS', new_job.title) except: print("FAILED") pass
def createLead(request, pk): # return Response({"message": "Hello, World!"}) user = User.objects.get(pk=pk) lead = Lead(user=user) if request.method == "POST": serializer = LeadSerializer(lead, data=request.data) data = {} if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def test_save_lead_and_active_client(self): lead = Lead.objects.get(id=1) lead.state = "LOST" lead.save() lead = Lead.objects.get(id=1) self.assertTrue(lead.client.active) # There's still anotger active lead for this client otherLead = Lead.objects.get(id=3) otherLead.state = "SLEEPING" otherLead.save() lead = Lead.objects.get(id=1) self.assertFalse(lead.client.active) newLead = Lead() newLead.subsidiary_id = 1 newLead.client = lead.client newLead.save() lead = Lead.objects.get(id=1) self.assertTrue(lead.client.active) # A new lead on this client should mark it as active again
def process(): # calculates number of pages pages = math.ceil(num_records / results_per_page) + 1 # creates page links using helper method below page_links = nav_list(int(pages)) # db query limiting number of results per page lead = Lead( first_name=request.form['first_name'], last_name=request.form['last_name'], email=request.form['email'], ) db.session.add(lead) db.session.commit() leads = Lead.query.limit(results_per_page).all() return render_template('/includes/_data.html', pages=page_links, current_page=1, leads=leads, all_results_pages=nav_list(int(pages)))
def create_lead(): """Create test lead @return: lead object""" lead = Lead(name="laala", due_date="2008-11-01", update_date="2008-11-01 16:14:16", creation_date="2008-11-01 15:43:43", start_date="2008-11-01", responsible=None, sales=None, external_staffing="JCF", state="QUALIF", deal_id="123456", client=Client.objects.get(pk=1), salesman=None, description="A wonderfull lead that as a so so long description", subsidiary=Subsidiary.objects.get(pk=1)) lead.save() return lead
def test_save_lead(self): subsidiary = Subsidiary.objects.get(pk=1) broker = BusinessBroker.objects.get(pk=1) client = Client.objects.get(pk=1) lead = Lead(name="laalaa", state="QUALIF", client=client, salesman=None, description="A wonderfull lead that as a so so long description", subsidiary=subsidiary) deal_id = client.organisation.company.code, date.today().strftime("%y") self.assertEqual(lead.deal_id, "") # No deal id code yet lead.save() self.assertEqual(lead.deal_id, "%s%s01" % deal_id) lead.paying_authority = broker lead.save() self.assertEqual(lead.deal_id, "%s%s01" % deal_id) lead.deal_id = "" lead.save() self.assertEqual(lead.deal_id, "%s%s02" % deal_id) # 01 is already used
def create(self, validated_data): lead_object = Lead(status=LeadStage.objects.get(pk=1), **validated_data) lead_object.save() salesperson = assign_salesperson() manager = SalesPersonUser.objects.get( pk=1) if salesperson.manager == None else salesperson.manager lead_object.assigned_to.set([salesperson]) lead_object.save() eventlog_obj = EventLog(event_lead=lead_object, event_type="New Lead", salesperson=salesperson, manager=manager) eventlog_obj.save() send_mail( 'New Lead', f'New Lead assigned to { salesperson.email }', '*****@*****.**', [salesperson.email, manager.email], fail_silently=False, ) return lead_object
def create_lead_from_file(validated_rows, invalid_rows, user_id): """Parameters : validated_rows, invalid_rows, user_id. This function is used to create leads from a given file. """ email_regex = '^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$' user = User.objects.get(id=user_id) for row in validated_rows: if not Lead.objects.filter(title=row.get('title')).exists(): if re.match(email_regex, row.get('email')) is not None: lead = Lead() lead.title = row.get('title') lead.first_name = row.get('first name') lead.last_name = row.get('last name') lead.website = row.get('website') lead.email = row.get('email') lead.phone = row.get('phone') lead.address_line = row.get('address') # lead.street = row.get('street') # lead.city = row.get('city') # lead.state = row.get('state') # lead.postcode = row.get('postcode') # lead.country = row.get('country') lead.created_by = user lead.save()
def lead_creation_api_endpoint_1_0(request): """ Versioned (1.0) API endpoint for lead creation. Expects a POST request with lead & distributor data """ #TODO: make this not a debug thing; requests to this endpoint should NOT becoming from the host server #that would mean someone set up a post automation to the lead endpoint, potentially making an infinite loop print "Host IP: {}".format(request.get_host()) ip = request.META.get('HTTP_CF_CONNECTING_IP') if ip is None: ip = request.META.get('REMOTE_ADDR') print "Requesting IP: {}".format(ip) if str(ip).lower() in str(request.get_host()).lower() or str( request.get_host()).lower() in str(ip).lower(): return HttpResponse(status=403) #forbidden if request.method != "POST": return HttpResponse("Method Not Allowed", status=405) #method not allowed else: #fix our state data abbreviated_personal_state = state_to_abbreviation( request.POST.get('personal_state', '')) abbreviated_business_state = state_to_abbreviation( request.POST.get('business_state', '')) #Instantiate a blank lead object and populate it with data from the various stuff we get via POST newlead = Lead( first_name=request.POST.get('first_name', ''), last_name=request.POST.get('last_name', ''), home_phone=request.POST.get('home_phone', ''), cell_phone=request.POST.get('cell_phone', ''), business_phone=request.POST.get('business_phone', ''), email=request.POST.get('email', ''), personal_address=request.POST.get('personal_address', ''), personal_address_2=request.POST.get('personal_address_2', ''), personal_city=request.POST.get('personal_city', ''), personal_state=abbreviated_personal_state, personal_zip=request.POST.get('personal_zip', ''), business_address=request.POST.get('business_address', ''), business_address_2=request.POST.get('business_address_2', ''), business_city=request.POST.get('business_city', ''), business_state=abbreviated_business_state, business_zip=request.POST.get('business_zip', ''), fax_number=request.POST.get('fax_number', ''), industry=request.POST.get('industry', ''), position=request.POST.get('position', ''), website=request.POST.get('website', ''), dob=request.POST.get('dob', None), comments=request.POST.get('comments', ''), referral=request.POST.get('referral', ''), notes=request.POST.get('notes', ''), ) #Try to associate a distributor with the new lead using the POSTed API key #wrap in str() just in case / for testing with UUIDs try: key = request.POST.get('api_key', '') newlead.distributor = Distributor.objects.get(api_key=str(key)) except: return HttpResponse("Invalid Distributor Key", status=400) #bad request #Call full_clean() BEFORE associating automations to avoid firing them with invalid data try: newlead.full_clean( ) #returns None when everything is all good, raises ValidationError otherwise except ValidationError, e: return HttpResponse("Invalid Data Supplied: {}".format(e), status=400) #must save the lead here in order to create database stuff necessary for m2m relationships newlead.save() for key in request.POST.getlist('invoked_email_automations'): try: newlead.invoked_email_automations.add( EmailAutomation.objects.get(invocation_key=str(key))) except Exception, e: return HttpResponse("Error Adding Email Automation: {}".format( Exception, e), status=400)
def register(self, data): customer = data.get('customer') try: l = Lead() l_id, msg = l.register(customer) if l_id: lead = Lead.objects.get(pk=l_id) else: return None, 'Lead not found' except: return None, 'Error registering the new lead' address_from = data.get('address_from') address_to = data.get('address_to') final_price = data.get('final_price') floor_from = data.get('floor_from') floor_to = data.get('floor_to') observations = data.get('observations') packaging_price = data.get('packaging_price') packaging_time_aprox = data.get('packaging_time_aprox') payment_method = data.get('payment_method') service_date = data.get('datetime_of_service') total_price = data.get('total_price') travel_distance_aprox = data.get('travel_distance_aprox') travel_distance_aprox_label = data.get('travel_distance_aprox_label') travel_price = data.get('travel_price') travel_time_aprox = data.get('travel_time_aprox') travel_time_aprox_label = data.get('travel_time_aprox_label') home_type_from_id = data.get('home_type_from_id') home_type_to_id = data.get('home_type_to_id') truck_size_type_id = data.get('truck_size_type_id') if not address_from or not address_to: return None, 'Revise que haya ingresado direcciones válidas.' if not home_type_from_id or not home_type_to_id: return None, 'Revise que haya seleccionado un tipo de vivienda.' if not floor_from or not floor_to: return None, 'Revise que haya ingresado el número de piso.' if travel_distance_aprox is None or travel_time_aprox is None: return None, 'El mapa no está mostrando la distancia correcta.' if not truck_size_type_id: return None, 'Selecciona un tipo de camión.' if not packaging_time_aprox or not packaging_price or not travel_price or not total_price or not final_price: return None, 'Revise que todos los campos estén completos.' try: home_type_from = HomeType.objects.get(pk=home_type_from_id) home_type_to = HomeType.objects.get(pk=home_type_to_id) except: return None, 'El tipo de casa no es válido.' try: truck_size_type = TruckSizeType.objects.get(pk=truck_size_type_id) except: return None, 'El tipo de camión no es válido.' quotation = ClientQuotation.objects.create( lead=lead, address_from=address_from, address_to=address_to, final_price=final_price, floor_from=floor_from, floor_to=floor_to, observations=observations, packaging_price=packaging_price, packaging_time_aprox=packaging_time_aprox, payment_method=payment_method, service_date=service_date, total_price=total_price, travel_distance_aprox=travel_distance_aprox, travel_distance_aprox_label=travel_distance_aprox_label, travel_price=travel_price, travel_time_aprox=travel_time_aprox, travel_time_aprox_label=travel_time_aprox_label, home_type_from=home_type_from, home_type_to=home_type_to, truck_size_type=truck_size_type) quotation.save() return quotation.id, 'ok'