def register_customer(request, group=None):
    post_data = request.POST
    data_source = []
    existing_customer = False
    product_obj = models.ProductData.objects.filter(product_id=post_data['customer-vin'])
    if not post_data['customer-id']:
        temp_customer_id = utils.generate_temp_id(TEMP_ID_PREFIX)
    else:
        temp_customer_id = post_data['customer-id']
        existing_customer = True
    data_source.append(utils.create_purchase_feed_data(post_data, product_obj[0], temp_customer_id))

    check_with_invoice_date = utils.subtract_dates(data_source[0]['product_purchase_date'], product_obj[0].invoice_date)    
    check_with_today_date = utils.subtract_dates(data_source[0]['product_purchase_date'], datetime.datetime.now())
    if not existing_customer and check_with_invoice_date.days < 0 or check_with_today_date.days > 0:
        message = "Product purchase date should be between {0} and {1}".\
                format((product_obj[0].invoice_date).strftime("%d-%m-%Y"),(datetime.datetime.now()).strftime("%d-%m-%Y"))
        logger.info('[Temporary_cust_registration]:: {0} Entered date is: {1}'.format(message, str(data_source[0]['product_purchase_date'])))
        return json.dumps({"message": message})

    try:
        with transaction.atomic():
            customer_obj = models.CustomerTempRegistration.objects.filter(temp_customer_id = temp_customer_id)
            if customer_obj:
                customer_obj = customer_obj[0]
                if customer_obj.new_number != data_source[0]['customer_phone_number']:
                    update_count = models.Constant.objects.get(constant_name='mobile_number_update_count').constant_value
                    if customer_obj.mobile_number_update_count >= int(update_count) and group[0] != Roles.SDMANAGERS:
                        customer_update = models.CustomerUpdateFailure(product_id = product_obj[0],
                                                                       customer_name = data_source[0]['customer_name'],
                                                                       customer_id = customer_obj.temp_customer_id,
                                                                       updated_by = "dealer-"+ str(request.user),
                                                                       old_number = customer_obj.new_number,
                                                                       new_number = data_source[0]['customer_phone_number'])
                        customer_update.save()
                        message = get_template('PHONE_NUMBER_UPDATE_COUNT_EXCEEDED')
                        return json.dumps({'message' : message})

                    if models.UserProfile.objects.filter(phone_number=data_source[0]['customer_phone_number']):
                        message = get_template('FAILED_UPDATE_PHONE_NUMBER').format(phone_number=data_source[0]['customer_phone_number'])
                        return json.dumps({'message': message})
                    old_number = customer_obj.new_number
                    customer_obj.new_number = data_source[0]['customer_phone_number']
                    customer_obj.product_data = product_obj[0]
                    customer_obj.sent_to_sap = False
                    customer_obj.dealer_asc_id = str(request.user)
                    customer_obj.mobile_number_update_count+=1
                    update_history = models.CustomerUpdateHistory(temp_customer=customer_obj,
                                                                  updated_field='Phone Number',
                                                                  old_value=old_number,
                                                                  new_value=customer_obj.new_number,
                                                                  email_flag=False)
                    update_history.save()
                    message = get_template('CUSTOMER_MOBILE_NUMBER_UPDATE').format(customer_name=customer_obj.new_customer_name, new_number=customer_obj.new_number)
                    for phone_number in [customer_obj.new_number, old_number]:
                        phone_number = utils.get_phone_number_format(phone_number)
                        sms_log(settings.BRAND, receiver=phone_number, action=AUDIT_ACTION, message=message)
                        send_job_to_queue(send_customer_phone_number_update_message, {"phone_number":phone_number, "message":message, "sms_client":settings.SMS_CLIENT})
                            
                    if models.UserProfile.objects.filter(user__groups__name=Roles.BRANDMANAGERS).exists():
                        groups = utils.stringify_groups(request.user)
                        if Roles.ASCS in groups:
                            dealer_asc_id = "asc : " + customer_obj.dealer_asc_id
                        elif Roles.DEALERS in groups:
                            dealer_asc_id = "dealer : " + customer_obj.dealer_asc_id
                        else :
                            dealer_asc_id = "manager : " + customer_obj.dealer_asc_id
                        
                        message = get_template('CUSTOMER_PHONE_NUMBER_UPDATE').format(customer_id=customer_obj.temp_customer_id, old_number=old_number, 
                                                                                  new_number=customer_obj.new_number, dealer_asc_id=dealer_asc_id)
                        managers = models.UserProfile.objects.filter(user__groups__name=Roles.BRANDMANAGERS)
                        for manager in managers:
                            phone_number = utils.get_phone_number_format(manager.phone_number)
                            sms_log(settings.BRAND, receiver=phone_number, action=AUDIT_ACTION, message=message)
                            send_job_to_queue(send_customer_phone_number_update_message, {"phone_number":phone_number, "message":message, "sms_client":settings.SMS_CLIENT})

            else:
                if models.UserProfile.objects.filter(phone_number=data_source[0]['customer_phone_number']):
                    message = get_template('FAILED_UPDATE_PHONE_NUMBER').format(phone_number=data_source[0]['customer_phone_number'])
                    return json.dumps({'message': message})
                customer_obj = models.CustomerTempRegistration(product_data=product_obj[0], 
                                                               new_customer_name = data_source[0]['customer_name'],
                                                               new_number = data_source[0]['customer_phone_number'],
                                                               product_purchase_date = data_source[0]['product_purchase_date'],
                                                               temp_customer_id = temp_customer_id,
                                                               dealer_asc_id = str(request.user))
            customer_obj.save()
            logger.info('[Temporary_cust_registration]:: Initiating purchase feed')
            feed_remark = FeedLogWithRemark(len(data_source),
                                                feed_type='Purchase Feed',
                                                action='Received', status=True)
            sap_obj = SAPFeed()
            feed_response = sap_obj.import_to_db(feed_type='purchase', data_source=data_source, feed_remark=feed_remark)
            if feed_response.failed_feeds > 0:
                logger.info('[Temporary_cust_registration]:: ' + json.dumps(feed_response.remarks))
                raise ValueError('purchase feed failed!')
            logger.info('[Temporary_cust_registration]:: purchase feed completed')
    except Exception as ex: 
        logger.info(ex)

        return HttpResponseBadRequest()
    if existing_customer:
        return json.dumps({'message': CUST_UPDATE_SUCCESS})
    return json.dumps({'message': CUST_REGISTER_SUCCESS + temp_customer_id})
    def upload_mech_data(self):
        """Upload data of the mechanic"""
        print "Started uploading mech data..."
        file_list = ["MECHANIC_DATA.csv"]
        mech_list = []
        retailer = get_model("Retailer", APP)
        dist = get_model("Distributor", APP)
        user_profile = get_model("UserProfile", APP)
        mech = get_model("Member", APP)
        State = get_model("State", APP)
        for i in range(0, 1):
            with open(settings.PROJECT_DIR + "/upload_data/" + file_list[i], "r") as csvfile:
                spamreader = csv.reader(csvfile, delimiter=",")
                next(spamreader)
                for row_list in spamreader:
                    temp = {}
                    temp["form_no"] = self.empty_to_none(row_list[0].strip())
                    temp["first_name"] = row_list[1].strip()

                    temp["last_name"] = row_list[3].strip()
                    dob = row_list[4].strip()
                    if dob:
                        temp["dob"] = datetime.datetime.strptime(dob, "%d/%m/%Y")
                    else:
                        temp["dob"] = None
                    temp["shop_name"] = row_list[5].strip()
                    temp["shop_no"] = row_list[6].strip()
                    temp["shop_address"] = row_list[7].strip()
                    temp["locality"] = row_list[8].strip()
                    temp["tehsil"] = row_list[9].strip()

                    temp["district"] = (row_list[11].strip()).upper()
                    temp["state"] = row_list[12].strip()
                    temp["pincode"] = row_list[13].strip()
                    temp["dist_id"] = row_list[14].strip()
                    temp["wall_len"] = self.empty_to_none(row_list[16].strip())
                    temp["wall_width"] = self.empty_to_none(row_list[17].strip())
                    temp["mobile"] = row_list[18].strip()
                    temp["two_stroke"] = self.empty_to_none(row_list[19].strip())
                    temp["four_stroke"] = self.empty_to_none(row_list[20].strip())
                    temp["cng_lpg"] = self.empty_to_none(row_list[21].strip())
                    temp["diesel"] = self.empty_to_none(row_list[22].strip())
                    temp["spare_month"] = self.empty_to_none(row_list[23].strip())
                    temp["genuine"] = self.empty_to_none(row_list[24].strip())
                    temp["ret_name"] = row_list[26].strip()
                    temp["ret_town"] = row_list[27].strip()

                    reg = row_list[29].strip()
                    if reg:
                        temp["reg_date"] = datetime.datetime.strptime(reg, "%d/%m/%Y")
                    else:
                        temp["reg_date"] = None

                    temp["complete"] = row_list[31].strip()
                    temp["mech_id"] = row_list[32].strip()
                    mech_list.append(temp)
        for mechanic in mech_list:
            mobile = mobile_format(mechanic["mobile"])
            mech_object = mech.objects.filter(phone_number=mobile).using(APP)
            if not mech_object:
                if not mechanic["mech_id"]:
                    mech_id = generate_temp_id("TME")
                else:
                    mech_id = mechanic["mech_id"]
                if mechanic["dist_id"]:
                    dist_object = dist.objects.using(APP).get(distributor_id=mechanic["dist_id"])
                else:
                    dist_object = None

                ret_obj = retailer.objects.filter(retailer_name=mechanic["ret_name"]).using(APP)
                if not ret_obj:
                    ret_obj = retailer(retailer_name=mechanic["ret_name"], retailer_town=mechanic["ret_town"])
                    ret_obj.save(using=APP)
                else:
                    ret_obj = ret_obj[0]
                state = State.objects.using(APP).get(state_name=mechanic["state"])
                mech_object = mech(
                    registered_by_distributor=dist_object,
                    preferred_retailer=ret_obj,
                    mechanic_id=mech_id,
                    first_name=mechanic["first_name"],
                    last_name=mechanic["last_name"],
                    date_of_birth=mechanic["dob"],
                    phone_number=mobile,
                    form_number=mechanic["form_no"],
                    registered_date=mechanic["reg_date"],
                    shop_number=mechanic["shop_no"],
                    shop_name=mechanic["shop_name"],
                    shop_address=mechanic["shop_address"],
                    locality=mechanic["locality"],
                    tehsil=mechanic["tehsil"],
                    district=mechanic["district"],
                    state=state,
                    pincode=mechanic["pincode"],
                    shop_wall_length=mechanic["wall_len"],
                    shop_wall_width=mechanic["wall_width"],
                    serviced_2S=mechanic["two_stroke"],
                    serviced_4S=mechanic["four_stroke"],
                    serviced_CNG_LPG=mechanic["cng_lpg"],
                    serviced_diesel=mechanic["diesel"],
                    spare_per_month=mechanic["spare_month"],
                    genuine_parts_used=mechanic["genuine"],
                    form_status=mechanic["complete"],
                )
                mech_object.save(using=APP)