示例#1
0
    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))
示例#2
0
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)
示例#3
0
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
示例#5
0
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)
示例#6
0
 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
示例#7
0
文件: views.py 项目: pasmi83/eStartup
 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)
示例#8
0
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
示例#9
0
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)
示例#10
0
文件: tests.py 项目: agateau/pydici
 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
示例#11
0
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)))
示例#12
0
文件: tests.py 项目: agateau/pydici
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
示例#13
0
文件: tests.py 项目: agateau/pydici
 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
示例#14
0
 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
示例#15
0
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()
示例#16
0
文件: views.py 项目: souldeux/sqrobin
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)
示例#17
0
    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'