Ejemplo n.º 1
0
def save_email_template(request):
    util = Utils()
    company_id = request.user.profile.company_id
    template_list = [
        'quotation', 'sales-order', 'invoice', 'contact', 'opportunity'
    ]
    for template in template_list:
        try:
            email_tmpl_obj = EmailTemplate.objects.get(company_id=company_id,
                                                       is_deleted=False,
                                                       module_type=template,
                                                       is_default=True)
        except EmailTemplate.DoesNotExist:
            return_data = util.set_default_template(
                request.user.profile.language.lower(), template)
            email_tmpl_obj = EmailTemplate()
            email_tmpl_obj.name = return_data['template_name']
            email_tmpl_obj.module_type = template
            email_tmpl_obj.subject = return_data['subject']
            email_tmpl_obj.description = return_data['description']
            email_tmpl_obj.company_id = company_id
            email_tmpl_obj.user_id = request.user.id
            email_tmpl_obj.create_by_user_id = request.user.id
            email_tmpl_obj.update_by_user_id = request.user.id
            email_tmpl_obj.is_default = True
            email_tmpl_obj.save()
Ejemplo n.º 2
0
def format_and_save_contact(user_id, list_data):
    contact_data_list = []
    utils = Utils()
    for i, d in enumerate(list_data):
        fields_list = []
        contact_data = {
            'name': '',
            'is_vendor': False,
            'is_customer': True,
            'contact_type': 'I',
            'profile_image': '',
            'user_id': user_id,
            'company_id': 0,
            'parent_id': 0,
            'fields': []
        }
        contact_data['profile_image'] = utils.get_profile_image(i)
        for key in d:
            value = utils.comma_sep_value(d[key])
            if key == 'name':
                contact_data['name'] = value
            else:
                temp_dic = {'id': key, 'value': value}
                fields_list.append(temp_dic)
        contact_data['fields'] = fields_list
        contact_data_list.append(contact_data)
        save_in_db(contact_data)
    return True
Ejemplo n.º 3
0
def editdata(request, uuid):
    data = {'success': False}
    utils = Utils()
    company_id = request.user.profile.company_id
    user_obj = request.user
    user_id = user_obj.id

    try:
        roles = request.user.profile.roles
    except roles.DoesNotExist:
        roles = "ADMIN"

    try:
        res = Quotation_template.objects.get(uuid=uuid, company_id=company_id)
        if res:
            edit_id = res.id
            currency = get_currency_name(company_id)
            products = getTeamplteProduct(edit_id, 'order', company_id,
                                          user_id, roles)
            optionals = getTeamplteProduct(edit_id, 'optional', company_id,
                                           user_id, roles)
            product_tax_return_data = display_tax_calculation(products)
            expiration_date = datetime.strptime(str(
                res.expiration_date), "%Y-%m-%d").strftime("%m/%d/%Y")

            template = {
                'id':
                res.id,
                'name':
                res.name,
                'terms_and_codition':
                res.terms_and_codition,
                'expiration_date': (expiration_date),
                'expiration_delay': (res.expiration_delay),
                'products':
                products,
                'optionals':
                optionals,
                'currency':
                currency,
                'amount_untaxed':
                res.amount_untaxed,
                'tax_amount':
                utils.round_value(product_tax_return_data['total_tax']),
                'multiple_tax':
                product_tax_return_data['multiple_tax_list'],
                'total_amount':
                res.total_amount,
                'opamount_untaxed':
                res.opamount_untaxed,
                'optax_amount':
                res.optax_amount,
                'optotal_amount':
                res.optotal_amount,
            }
            data['template'] = template
            data['success'] = True
    except Quotation_template.DoesNotExist:
        data['success'] = False
    return HttpResponse(json.dumps(data), content_type="application/json")
Ejemplo n.º 4
0
def forgot_password(request):
    return_status = {'msg': ''}
    util = Utils()
    if request.method == "POST":
        #todo write code here
        email = request.POST.get("email")
        try:
            user = User.objects.get(email=email)
            if user:
                activation_key = hashlib.sha256(
                    email.encode('utf-8')).hexdigest()[:30]
                user.profile.activation_key = activation_key
                user.profile.save()
                util.reset_password(user, user.profile)
                return_status[
                    'msg'] = 'Your password rest link has been send on your email. '
            else:
                return_status['msg'] = email + '  this email does not exits.'
        except User.DoesNotExist:
            return_status['msg'] = email + '  this email does not exits.'
        return render(request, 'web/auth/forgot_password.html',
                      {'return_status': return_status})
    else:
        return render(request, 'web/auth/forgot_password.html',
                      {'return_status': return_status})
Ejemplo n.º 5
0
def contact_import_mapping(request):
    contact_list = {'success': False, 'file': ''}
    user_id = request.user.id
    utils = Utils()
    if request.method == "POST" and request.is_ajax():
        if 'file_name' in request.POST:
            file_name = request.POST['file_name']
            fields = json.loads(request.POST['fields'])
            if fields.count('0') == len(fields):
                contact_list = {
                    'success': False,
                    'file': '',
                    'msg': 'You did not selected any fields.'
                }
                return HttpResponse(json.dumps(contact_list),
                                    content_type="application/json")
            file_path = 'media/user_csv/' + str(request.user.id)
            uploaded_file_url = settings.BASE_DIR + '/' + file_path + '/' + file_name
            try:
                with open(uploaded_file_url, "r",
                          encoding="latin-1") as csvfile:
                    dialect = csv.Sniffer().sniff(csvfile.read(),
                                                  delimiters=';,')
                    csvfile.seek(0)
                    reader = csv.reader(csvfile, dialect=dialect)
                    file_rows = []
                    try:
                        for line_number, row in enumerate(reader):
                            if len(row) > 1:
                                temp_dic = {}
                                for idx, col in enumerate(fields):
                                    temp_list = []
                                    if col != '0':
                                        if row[idx]:
                                            if fields[idx] in temp_dic:
                                                temp_list.append(
                                                    utils.comma_sep_value(
                                                        temp_dic[fields[idx]]))
                                                temp_list.append(row[idx])
                                                temp_dic[
                                                    fields[idx]] = temp_list
                                            else:
                                                temp_dic[
                                                    fields[idx]] = row[idx]
                                file_rows.append(temp_dic)
                        if len(file_rows) > 0:
                            format_and_save_contact(user_id, file_rows)
                        contact_list['csv_cols'] = file_rows
                        contact_list['success'] = True
                        os.remove(uploaded_file_url)
                    except csv.Error as e:
                        sys.exit('file %s, line %d: %s' %
                                 (uploaded_file_url, reader.line_num, e))
            except IOError as e:
                print("I/O error({0}): {1}".format(e.errno, e.strerror))
    return HttpResponse(json.dumps(contact_list),
                        content_type="application/json")
Ejemplo n.º 6
0
def index(request):

    utils = Utils()
    user_id = request.user.id
    data_list = []
    result_dic = {
        'fields': [],
        'companies': [],
        'tags': [],
        'profile_image': '/static/front/images/profile.png'
    }
    contact_tabs = ContactTab.objects.all().filter(
        user_id=user_id).order_by('display_weight')
    try:
        c = Contact.objects.all().filter(user_id=user_id).count()
    except Contact.DoesNotExist:
        c = 1
    result_dic['profile_image'] = utils.get_profile_image(c)

    if contact_tabs is not None:
        for o in contact_tabs:
            default_data_fields = ContactFields.objects.all().filter(
                id__in=o.fields).order_by('display_weight')
            if default_data_fields is not None:
                field_list = []
                for f in default_data_fields:
                    if f.type == 'checkbox' or f.type == 'radio' or f.type == 'dropdown':
                        checkbox = []
                        for d in f.default_values:
                            default_dic = {'value': d, 'checked': False}
                            checkbox.append(default_dic)
                        default_value = checkbox
                    else:
                        default_value = f.default_values
                    field_dic = {
                        'id': f.id,
                        'name': f.label,
                        'type': f.type,
                        'display_position': f.display_position,
                        'default_values': default_value
                    }
                    field_list.append(field_dic)

                data_list.append({
                    'name': o.name,
                    'id': o.id,
                    'display_weight': o.display_weight,
                    'is_default': o.is_default,
                    'fields': field_list
                })
        result_dic['fields'] = data_list
    else:
        default_data_fields = {}
    return HttpResponse(json.dumps(result_dic),
                        content_type="application/json")
Ejemplo n.º 7
0
def generate_pdf(request, report_id, report_for):
    report_id = str(report_id)
    if report_for == 'quotation' or report_for == 'sales_order':
        document_header_url = settings.LOCAL_HOST_NAME + 'quotation/document_header/' + report_id + '/' + report_for + '/'
        document_footer_url = settings.LOCAL_HOST_NAME + 'quotation/document_footer/' + report_id + '/'
        document_content_url = settings.LOCAL_HOST_NAME+'quotation/document/'+report_id+'/'
    elif report_for == 'invoice':
        document_header_url = settings.LOCAL_HOST_NAME + 'invoice/invoice_header/' + report_id + '/' + report_for + '/'
        document_footer_url = settings.LOCAL_HOST_NAME + 'invoice/invoice_footer/' + report_id + '/'
        document_content_url = settings.LOCAL_HOST_NAME + 'invoice/document/'+report_id+'/'
    file_name ='aa.pdf'
    file_path = settings.MEDIA_ROOT+'/'+file_name
    util = Utils()
    return util.generate_pdf_from_url(document_header_url, document_footer_url,  document_content_url, file_path)
Ejemplo n.º 8
0
def company_wizard_step_two(request):
    company_users = Profile.objects.filter(
        is_super_admin=False,
        company_id=request.user.profile.company_id).count()
    default_template = save_email_template(request)
    if request.user.profile.is_super_admin and company_users == 0:
        return_status = {
            'msg':
            None,
            'emails': [{
                'name': 'email_1',
                'class': '',
                'value': '',
                'style': ''
            }, {
                'name': 'email_2',
                'class': '',
                'value': '',
                'style': ''
            }, {
                'name': 'email_3',
                'class': '',
                'value': '',
                'style': ''
            }, {
                'name': 'email_4',
                'class': '',
                'value': '',
                'style': ''
            }, {
                'name': 'email_5',
                'class': '',
                'value': '',
                'style': ''
            }]
        }
        language = request.user.profile.company.language
        company_id = request.user.profile.company_id
        email_exits = False
        if request.method == "POST":
            for index, post_email in enumerate(return_status['emails']):
                request_email = request.POST.get(
                    return_status['emails'][index]['name'])
                print("request_email", request_email)
                if User.objects.filter(username=request_email).exists(
                ) or User.objects.filter(email=request_email).exists():
                    return_status['emails'][index][
                        'style'] = 'border-color: red;'
                    email_exits = True
                return_status['emails'][index]['value'] = request_email
            if not email_exits:
                for index, post_email in enumerate(return_status['emails']):
                    util = Utils()
                    if return_status['emails'][index]['value']:
                        activation_key = hashlib.sha256(
                            return_status['emails'][index]['value'].encode(
                                'utf-8')).hexdigest()[:30]
                        new_user = User.objects.create_user(
                            username=return_status['emails'][index]['value'],
                            email=return_status['emails'][index]['value'],
                            is_active=False)
                        new_user.save()
                        default_roles = [
                            'ROLE_MANAGE_ALL_CONTACT',
                            'ROLE_MANAGE_ALL_CALENDAR',
                            'ROLE_MANAGE_ALL_OPPORTUNITY',
                            'ROLE_MANAGE_ALL_QUOTATION',
                            'ROLE_MANAGE_ALL_INVOICE', 'ROLE_MANAGE_ALL_SALES',
                            'ROLE_ACCESS_RIGHT', 'ROLE_ACCESS_SETTING'
                        ]
                        new_user.profile = Profile(
                            activation_key=activation_key,
                            color=util.get_profile_color(new_user.id),
                            company_id=company_id,
                            user_id=new_user.id,
                            language=language,
                            roles=default_roles)
                        new_user.profile.default_sales_channel = get_company_default_channel(
                            company_id)
                        new_user.profile.save()
                        util.send_activation(new_user, new_user.profile, True)
                return redirect('/welcome/')
        return render(request, 'web/auth/company_wizard_step_two.html',
                      {'return_status': return_status})
    else:
        return redirect('/dashboard/')
Ejemplo n.º 9
0
def register(request):
    util = Utils()
    roles = settings.DEFAULT_ROLES
    return_status = {
        'msg': '',
        'name': '',
        'email': '',
        'password': '',
        'compnay_name': '',
        'phone': ''
    }
    if request.method == "POST":
        first_name = request.POST.get("first_name")
        last_name = request.POST.get("last_name")
        name = request.POST.get("email")
        email = request.POST.get("email")
        password = request.POST.get("password")
        compnay_name = request.POST.get("compnay_name")
        phone = request.POST.get("phone")

        return_status['first_name'] = first_name
        return_status['last_name'] = last_name
        return_status['name'] = name
        return_status['email'] = email
        return_status['password'] = password
        return_status['compnay_name'] = compnay_name
        return_status['phone'] = phone

        if not User.objects.filter(username=name).exists():
            if not User.objects.filter(email=email).exists():
                activation_key = hashlib.sha256(
                    email.encode('utf-8')).hexdigest()[:30]
                user = User.objects.create_user(first_name=first_name,
                                                last_name=last_name,
                                                username=name,
                                                email=email,
                                                password=password,
                                                last_login=timezone.now())
                user.last_login = timezone.now()
                if user:
                    company = Company(company=compnay_name,
                                      email=email,
                                      user=user,
                                      phone=phone)
                    company.save()
                    profile = Profile(company=company,
                                      is_super_admin=True,
                                      is_admin=True,
                                      color=settings.ADMIN_COLOR,
                                      phone=phone,
                                      activation_key=activation_key,
                                      user=user,
                                      roles=roles)
                    profile.save()
                    insert_default_tags(company, user.id)
                    status = save_default_fields(company, user.id, 'English')
                    initalize_modules(company)
                    util.send_activation(user, profile)
                    if (status):
                        user = authenticate(username=name, password=password)
                        login(request, user)
                        sales_channel = add_default_sales_channel_on_signup(
                            request)
                        default_tax = add_default_product_tax(request)
                        if sales_channel:
                            try:
                                profile = Profile.objects.get(user=user)
                                profile.default_sales_channel = sales_channel
                                profile.save()
                            except Profile.DoesNotExist:
                                print("Profile.DoesNotExist")

                        return HttpResponseRedirect('/company-wizard/')
                    else:
                        return HttpResponseRedirect('/register/')
                else:
                    return_status['msg'] = 'User could not saved!! '
                    return render(request, 'web/auth/register.html',
                                  {'return_status': return_status})
            else:
                return_status['msg'] = 'Email already exits.'
                return render(request, 'web/auth/register.html',
                              {'return_status': return_status})
        else:
            return_status['msg'] = 'Username  already exits.'
            return render(request, 'web/auth/register.html',
                          {'return_status': return_status})
    else:
        return render(request, 'web/auth/register.html',
                      {'return_status': return_status})
Ejemplo n.º 10
0
def user_save(request):
    user_id = request.user.id
    return_status = {
        'success': False,
        'user': 0,
        'msg': '',
        'activation_link': '',
        'redirect_url': ''
    }
    if request.method == "POST" and request.is_ajax():
        post_user_id = int(request.POST['user_id'])
        name = request.POST['email']
        email = request.POST['email']
        password = request.POST['password']
        language = request.POST['language']
        signature = request.POST['signature']
        phone = request.POST['phone']
        mobile = request.POST['mobile']
        first_name = request.POST['first_name']
        last_name = request.POST['last_name']
        profile_image = request.POST['profile_image']
        roles = ast.literal_eval(request.POST['roles'])
        user_email = User.objects.filter(email=email)
        user_name = User.objects.filter(username=name)
        activation_key = hashlib.sha256(email.encode('utf-8')).hexdigest()[:30]
        google_client_id = request.POST['google_client_id']
        google_client_secret = request.POST['google_client_secret']
        user_time_zone = request.POST['user_time_zone']

        admin = False
        staff = False
        password_changed = False
        if 'Staff' in roles:
            staff = True
        if 'Admin' in roles:
            admin = True

        if post_user_id and post_user_id > 0:
            try:
                user = User.objects.get(pk=post_user_id)
                user.username = name
                user.email = email
                user.first_name = first_name
                user.last_name = last_name
                if password:
                    user.set_password(password)
                    password_changed = True
                    return_status['redirect_url'] = '/login/'
                user.save()
                try:
                    if len(roles) > 0:
                        user.profile.roles = roles
                    else:
                        user.profile.roles = user.profile.roles
                    user.profile.language = language
                    user.profile.phone = phone
                    user.profile.mobile = mobile

                    user.profile.is_admin = admin
                    user.profile.profile_image = profile_image
                    user.profile.temp_pass = password
                    user.profile.signature = signature
                    user.profile.google_client_id = google_client_id
                    user.profile.google_client_secret = google_client_secret
                    user.profile.user_time_zone = user_time_zone
                    user.profile.save()
                    return_status['user'] = user.id
                    return_status['success'] = True
                    if password_changed:
                        return_status[
                            'msg'] = 'You changed your password that is update successfully, so you will redirect to login page after 5 second.'
                    else:
                        return_status['msg'] = settings.LABELS[
                            request.user.profile.
                            language]['text_update_sueess']
                except Profile.DoesNotExist:
                    return_status['msg'] = 'Profile DoesNotExist'
                    return_status['success'] = False
            except User.DoesNotExist:
                return_status['msg'] = 'User DoesNotExist'
                return_status['success'] = False
        else:
            if user_email.exists():
                return_status[
                    'msg'] = 'user email already exits'  #settings.LABELS[request.user.profile.language]['text_email_exits']
            elif user_name.exists():
                return_status['msg'] = 'username already exits'
            else:
                util = Utils()
                new_user = User.objects.create_user(username=name,
                                                    email=email,
                                                    is_active=False,
                                                    first_name=first_name,
                                                    last_name=last_name,
                                                    password=password,
                                                    last_login=timezone.now())
                new_user.save()

                profile = Profile(activation_key=activation_key,
                                  color=util.get_profile_color(new_user.id),
                                  is_admin=admin,
                                  temp_pass=password,
                                  profile_image=profile_image,
                                  phone=phone,
                                  mobile=mobile,
                                  company_id=request.user.profile.company_id,
                                  user_id=new_user.id,
                                  language=language,
                                  roles=roles)
                profile.default_sales_channel = get_company_default_channel(
                    request.user.profile.company_id)
                profile.save()

                return_status['success'] = True
                return_status['user'] = new_user.id
                return_status['msg'] = 'User Created Successfully..'
        return HttpResponse(json.dumps(return_status),
                            content_type='application/json')
    else:
        return HttpResponse(return_status)
Ejemplo n.º 11
0
def get_all_user(request):
    util = Utils()
    company_id = request.user.profile.company_id
    return_status = {'success': False, 'users': [], 'msg': ''}
    users_list = []
    users = Profile.objects.select_related(
        'user', 'company').filter(company_id=company_id).order_by('user__id')

    if users:
        for u in users:
            color = u.color
            print(color)
            super_admin = False
            editable = True
            if u.phone:
                phone = u.phone
            else:
                phone = '-'

            if u.user.is_superuser:
                user_type = 'Super Admin'
                if request.user.is_superuser:
                    editable = True
                else:
                    editable = False
                user_is_staff = False
                super_admin = True
            elif u.is_admin:
                user_is_staff = False
                user_type = settings.LABELS[
                    request.user.company.language]['text_admin']
            else:
                user_is_staff = True
                user_type = settings.LABELS[
                    request.user.company.language]['text_staff']

            if u.user.is_active:
                user_status_text = settings.LABELS[
                    request.user.company.language]['text_deactivate']
                user_status_class = 'glyphicon-ok text-success'
            else:
                user_status_text = settings.LABELS[
                    request.user.company.language]['text_activate']
                user_status_class = 'glyphicon-remove text-danger'
            users_list.append({
                'username': u.user.username,
                'email': u.user.email,
                'phone': phone,
                'language': u.language,
                'company': u.company.company,
                'permissions': u.roles,
                'id': u.user.id,
                'is_staff': user_is_staff,
                'user_type': user_type,
                'super_admin': super_admin,
                'status': user_status_text,
                'user_status_class': user_status_class,
                'editable': editable,
                'color': color
            })
        return_status['users'] = users_list
        return_status['success'] = True
    return HttpResponse(json.dumps(return_status),
                        content_type='application/json')
Ejemplo n.º 12
0
def modules(request):
    print("roles::", request.user.profile.roles,
          type(request.user.profile.roles))
    return_response = {
        'result': [],
        'status': True,
        'message': '',
        'link': '',
        'trial_over': False,
        'expire_message': ''
    }
    company_id = request.user.profile.company_id
    data_list = []
    util = Utils()
    joining_date_status = util.get_login_period(request.user.date_joined)
    user_modules = CompanyModulesMapping.objects.all().select_related(
        "module").filter(company_id=company_id)

    if request.user.profile.company.company_status == 'trial':
        if request.user.profile.is_super_admin and joining_date_status[
                'login_hours'] <= 4 and request.user.profile.activation_key:
            return_response[
                'message'] = 'Activation pending! Your account will expire in ' + str(
                    joining_date_status['login_hours']) + ' hours.'
        elif joining_date_status['left_days'] > 0 and joining_date_status[
                'left_days'] <= 14 and (request.user.is_superuser
                                        or request.user.profile.is_admin):
            return_response[
                'message'] = ' Your free trial will expire in ' + str(
                    joining_date_status['expire_days']) + ' days'
            return_response['link'] = '/price-online/'
        elif joining_date_status['left_days'] == 0 and (
                request.user.is_superuser or request.user.profile.is_admin):
            return_response[
                'message'] = ' Your free trial will expire Today.  '
            return_response['link'] = '/price-online/'
        else:
            if not request.user.profile.is_admin:
                return_response['trial_over'] = False
                return_response['message'] = ''
            else:
                return_response[
                    'message'] = 'Your free trial has been expired.'
                return_response['trial_over'] = False
                return_response['link'] = ''
    elif request.user.profile.company.company_status == 'client':
        user_modules = user_modules.filter(is_installed=True)
    '''if joining_date_status['left_days'] < 0:
        return_response['trial_over'] = True
        if joining_date_status['left_days'] <= 7 and (request.user.is_superuser or request.user.profile.is_admin) and request.user.profile.company.company_status == 'T':
            return_response['message'] = 'Your trial period is now OVER. We will keep your data on ' + str(joining_date_status['data_delete_date']) + '. To continue using our solution you have to '
    '''

    print("user_modules", user_modules)

    if len(user_modules) > 0:
        for user_module in user_modules:
            if user_module.module.slug == 'crm':
                data_list.append({
                    'sort':
                    1,
                    'label':
                    'Contact',
                    'anchor_class':
                    'contact tourist-place-1',
                    'css_class':
                    'icon-contact',
                    'link':
                    '/contact/list/'
                    if not return_response['trial_over'] else ''
                })
                data_list.append({
                    'sort':
                    2,
                    'label':
                    'Calendar',
                    'anchor_class':
                    'calendar',
                    'css_class':
                    'icon-calendar',
                    'link':
                    '/calendar/list/'
                    if not return_response['trial_over'] else ''
                })
            if user_module.module.slug == 'opportunity' and 'ROLE_NO_ACCESS_OPPORTUNITY' not in request.user.profile.roles:
                data_list.append({
                    'sort':
                    3,
                    'label':
                    'Opportunity',
                    'anchor_class':
                    'opportunity',
                    'css_class':
                    'icon-opportunity',
                    'link':
                    '/opportunity/list/'
                    if not return_response['trial_over'] else ''
                })

            if user_module.module.slug == 'sales':
                data_list.append({
                    'sort':
                    4,
                    'label':
                    'Quotations',
                    'anchor_class':
                    'quotations',
                    'css_class':
                    'icon-quotations',
                    'link':
                    '/quotation/list/'
                    if not return_response['trial_over'] else ''
                })
                data_list.append({
                    'sort':
                    5,
                    'label':
                    'Invoice',
                    'anchor_class':
                    'invoice',
                    'css_class':
                    'icon-quotations',
                    'link':
                    '/customer/invoice/list/'
                    if not return_response['trial_over'] else ''
                })

                data_list.append({
                    'sort':
                    6,
                    'label':
                    'Sales',
                    'anchor_class':
                    'sales',
                    'css_class':
                    'icon-sales',
                    'link':
                    '/sales/' if not return_response['trial_over'] else ''
                })

    if request.user.is_superuser or request.user.profile.is_admin:
        data_list.append({
            'sort':
            7,
            'label':
            'Settings',
            'anchor_class':
            'settings',
            'css_class':
            'icon-settings',
            'link':
            '/user/list/' if not return_response['trial_over'] else ''
        })

    try:
        stripe = Stripe.objects.get(company_id=request.user.profile.company_id)
        if stripe and (request.user.is_superuser
                       or request.user.profile.is_admin):
            data_list.append({
                'sort':
                8,
                'label':
                'Apps',
                'anchor_class':
                'apps',
                'css_class':
                'icon-apps',
                'link':
                '/apps/' if not return_response['trial_over'] else ''
            })
    except:
        print("not stripe user")
    data_list = sorted(data_list, key=lambda k: k['sort'])
    return_response['result'] = data_list
    return HttpResponse(json.dumps(return_response),
                        content_type="application/json")
Ejemplo n.º 13
0
def updateTemplate(request):
    utils = Utils()
    data = {'success': False}
    company_id = request.user.profile.company_id
    user_obj = request.user

    json_data = json.loads(request.POST['fields'])

    if 'id' in json_data and json_data['id']:
        try:
            tmpl_obj = Quotation_template.objects.get(uuid=json_data['id'])
            tmpl_obj.name = json_data['name']
            tmpl_obj.company_id = company_id
            tmpl_obj.update_by_user = user_obj

            if 'tax_amt' in json_data and json_data['tax_amt'] != '':
                tmpl_obj.tax_amount = int(json_data['tax_amt'])

            if 'untaxed_amt' in json_data and json_data['untaxed_amt'] != '':
                tmpl_obj.amount_untaxed = utils.round_value(
                    json_data['untaxed_amt'])
                if 'tax_amt' in json_data and json_data['tax_amt'] != '':
                    tmpl_obj.total_amount = utils.round_value(
                        json_data['untaxed_amt']) + utils.round_value(
                            json_data['tax_amt'])
                else:
                    tmpl_obj.total_amount = utils.round_value(
                        json_data['untaxed_amt'])

            if 'optax_amt' in json_data and json_data['optax_amt'] != '':
                tmpl_obj.optax_amount = utils.round_value(
                    json_data['optax_amt'])

            if 'opuntaxed_amt' in json_data and json_data[
                    'opuntaxed_amt'] != '':
                tmpl_obj.opamount_untaxed = utils.round_value(
                    json_data['opuntaxed_amt'])
                if 'optax_amt' in json_data and json_data['optax_amt'] != '':
                    tmpl_obj.optotal_amount = utils.round_value(
                        json_data['opuntaxed_amt']) + utils.round_value(
                            json_data['optax_amt'])
                else:
                    tmpl_obj.optotal_amount = utils.round_value(
                        json_data['opuntaxed_amt'])

            if 'notes' in json_data:
                tmpl_obj.terms_and_codition = json_data['notes']

            if 'expiration_delay' in json_data and json_data[
                    'expiration_delay'] != '':
                tmpl_obj.expiration_delay = json_data['expiration_delay']
                tmpl_obj.expiration_date = datetime.now() + timedelta(
                    days=int(json_data['expiration_delay']))

            tmpl_obj.save()

            if tmpl_obj.id > 0:
                Quotation_template_record.objects.filter(
                    quotation_template=tmpl_obj,
                    company_id=company_id).delete()
                addProduct(json_data['products'], 'order', tmpl_obj, user_obj,
                           company_id)
                addProduct(json_data['optional_products'], 'optional',
                           tmpl_obj, user_obj, company_id)
            data['success'] = True
            data['uuid'] = json_data['id']

        except Quotation_template.DoesNotExist:
            data['success'] = False

    return HttpResponse(json.dumps(data), content_type="application/json")
Ejemplo n.º 14
0
def getTeamplteProduct(id, line_type, company_id, user_id, roles):
    utils = Utils()
    pro_record_list = []
    q_t_r_dict = Quotation_template_record.objects.filter(
        quotation_template_id=id, line_type=line_type).order_by('id')
    if len(q_t_r_dict) > 0:
        for o in q_t_r_dict:

            uom_name = ''
            product_name = 'Product Deleted'
            tax_id = ''
            tax_name = ''
            tax_computation = None
            tax_value = None
            json_uom = []

            product_uuid = None

            if o.product_uom is not None:
                uom_name = o.product_uom.name
                if o.product_uom.category_id is not None:
                    json_uom = getUOMforProduct(o.product_uom.category_id,
                                                company_id)

            if o.Product is not None:
                product_name = o.Product.internal_reference if o.Product.internal_reference is not None else ''
                product_name = product_name + ' '
                product_name = product_name + o.Product.template_name if o.Product.template_name is not None else ''

                if o.Taxes is not None:
                    tax_id = o.Taxes.id
                    tax_name = o.Taxes.name
                    tax_computation = o.Taxes.computation
                    tax_value = o.Taxes.value

            if o.Product_id:
                product_uuid = str(o.Product.uuid)

            pro_record_list.append({
                'record_id':
                o.id,
                'uuid':
                product_uuid,
                'Product':
                o.Product_id,
                'product_name':
                product_name,
                'product_description':
                o.discription,
                'product_qty':
                o.product_qty,
                'product_uom':
                o.product_uom_id,
                'product_uom_name':
                uom_name,
                'product_tax_id':
                tax_id,
                'product_tax_name':
                tax_name,
                'product_tax_value':
                utils.round_value(tax_value),
                'product_tax_computation':
                tax_computation,
                'unit_price':
                utils.round_value(o.unit_price),
                'tax_price':
                utils.round_value(o.tax_price),
                'price_subtotal':
                utils.round_value(o.price_subtotal),
                'price_total':
                utils.round_value(o.price_total),
                'price_reduce':
                utils.round_value(o.price_reduce),
                'discount':
                utils.round_value(o.discount),
                'json_uom':
                json_uom,
            })
    return pro_record_list
Ejemplo n.º 15
0
def payment_step_2(request):
    company_id = request.user.profile.company_id
    stripe_key = settings.STRIPE_SETTINGS['stripe_key_test_public']
    vat_percent_value = settings.VAT['value']
    vat_percent_percent = settings.VAT['percent']
    util = Utils()
    joining_date_status = util.get_login_period(request.user.date_joined)
    vat_message = None

    if request.method == "POST":
        vat_number = request.POST['vat']
        is_vat_will_charge = request.POST['is_vat_will_charge']
        first_name = request.POST['first_name']
        last_name = request.POST['last_name']
        try:
            user = User.objects.get(pk=request.user.id)
            user.first_name = first_name
            user.last_name = last_name
            user.save()
        except User.DoesNotExist:
            print('User DoesNotExist')

        try:
            company = Company.objects.get(pk=request.user.profile.company_id)
            company.billing_street = request.POST['company-name']
            company.billing_city = request.POST['city']
            company.billing_zip = request.POST['zip']
            company.billing_street = request.POST['street']
            try:
                country = Countries.objects.get(pk=request.POST['country'])
                company.country = country
            except Countries.DoesNotExist:
                print('Countries DoesNotExist')
            company.save()
        except Company.DoesNotExist:
            print('Company DoesNotExist')

        if is_vat_will_charge and vat_number != '':
            return_status = check_vat_valid(vat_number)
            if return_status:
                vat_charge = False
            else:
                vat_charge = True
        elif is_vat_will_charge and vat_number == '':
            vat_charge = True
        else:
            vat_charge = False
        try:
            if request.user.stripe.customer_id:
                return HttpResponseRedirect("/dashboard/")
        except:
            pass
            module_list = []
            total_user = 1
            modules = Modules.objects.all()
            active_user = User.objects.select_related('profile').filter(
                is_active=True).filter(profile__company_id=company_id).count()
            if active_user > 1:
                total_user = active_user

            if modules:
                for module in modules:
                    if module.slug == 'crm':
                        data_app = 'crm'
                        data_requires = 'contact, calendar'
                        icon = 'fa fa-th'
                    if module.slug == 'invoice':
                        data_app = 'invoice'
                        data_requires = ''
                        icon = 'icon-invoice'
                    if module.slug == 'quotations':
                        data_app = 'quotations'
                        data_requires = ''
                        icon = 'icon-quotations'
                    if module.slug == 'opportunity':
                        data_app = 'opportunity'
                        data_requires = ''
                        icon = 'icon-opportunity'
                    module_list.append({
                        'name': module.name,
                        'slug': module.slug,
                        'price': '',
                        'data_app': data_app,
                        'data_requires': data_requires,
                        'icon': icon
                    })
            price = settings.PRICES
            if joining_date_status['expire_days'] in [7, 6, 5, 4, 3]:
                price['discount'] = 40
            elif joining_date_status['expire_days'] in [2, 1]:
                price['discount'] = 50
            else:
                price['discount'] = 25

            #print("vat_message", vat_message)
            return render(
                request, 'web/payment_step_2.html', {
                    'prices': price,
                    'modules': module_list,
                    'total_user': total_user,
                    'stripe_key': stripe_key,
                    'vat_charge': vat_charge,
                    'vat_percent_value': vat_percent_value,
                    'vat_message': vat_message,
                    'vat_percent_percent': vat_percent_percent
                })
    else:
        return redirect('/payment_step_1/')
Ejemplo n.º 16
0
def user_change_status(request):

    proration_date = int(time.time())
    return_status = {'success': False, 'msg': '', 'user_status': ''}
    company_id = request.user.profile.company_id
    if request.method == "POST" and request.is_ajax():
        user_id = request.POST['user_id']
        try:
            user = User.objects.get(pk=user_id)
            user.is_active = False if user.is_active else True
            user.save()
            if user.is_active:
                profile = Profile.objects.get(user_id=user_id)
                profile.activation_key = None
                profile.save()
                return_status['user_status'] = settings.LABELS[
                    request.user.profile.language]['text_activate']
                return_status['msg'] = settings.LABELS[
                    request.user.profile.language]['msg_user_activate']
                return_status[
                    'user_status_class'] = 'glyphicon-ok text-success'
                util = Utils()
                util.send_invitation(request.user.username, user, profile)

            else:
                return_status['user_status'] = settings.LABELS[
                    request.user.profile.language]['text_deactivate']
                return_status['msg'] = settings.LABELS[
                    request.user.profile.language]['msg_user_deactivate']

                return_status[
                    'user_status_class'] = 'glyphicon-remove text-danger'

            return_status['success'] = True
        except User.DoesNotExist:
            return_status['msg'] = 'User DoesNotExist'

        total_user = User.objects.select_related('profile').filter(
            is_active=True).filter(profile__company_id=company_id).count()
        try:
            if request.user.stripe.selected_users and request.user.stripe.selected_users < total_user:
                token = request.user.stripe.token
                customer_id = request.user.stripe.customer_id
                plan = request.user.stripe.plan
                if plan == 'yearly':
                    stripe_plan = 'yearly-user'
                else:
                    stripe_plan = 'monthly-user'
                subscription = update_subscription_by_user(
                    customer_id, request.user.stripe.subscription_id,
                    settings.STRIPE_PLANS[stripe_plan], total_user,
                    proration_date)
                if subscription:
                    amount = 0
                    if subscription['items']['data']:
                        for item in subscription['items']['data']:
                            amount = amount + item['plan']['amount'] * item[
                                'quantity']
                    Stripe.save_update_stripe(user_id, company_id, token,
                                              customer_id, plan, amount,
                                              total_user, subscription.id)
        except:
            print("no strip account")
            #customer = create_customer(email, token)
    return HttpResponse(json.dumps(return_status),
                        content_type='application/json')
Ejemplo n.º 17
0
def send_message(request):
    sender_email = request.user.email
    company_id = request.user.profile.company_id
    return_status = {'success': False, 'result': []}
    if request.method == "POST" and request.is_ajax():
        send_to = []
        contact_ids = []
        external_emails = []
        internal_recipients = json.loads(request.POST['internal_recipients'])
        external_recipients = json.loads(request.POST['external_recipients'])
        if len(external_recipients) > 0:
            external_emails = external_recipients[-1].split(',')


        if len(internal_recipients) > 0 and len(external_emails) > 0:
            for ir in internal_recipients:
                if ir['email'] not in send_to and validate_email(ir['email']):
                    send_to.append(ir['email'])
            for extr_email in external_emails:
                if extr_email not in send_to:
                    send_to.append(extr_email)
        elif len(internal_recipients) > 0 and len(external_emails) == 0:
            for ir in internal_recipients:
                if ir['email'] not in send_to and validate_email(ir['email']):
                    send_to.append(ir['email'])
        elif len(internal_recipients) == 0 and len(external_emails) > 0:
            for extr_email in external_recipients:
                if validate_email(extr_email):
                    send_to.append(extr_email)

        message_text = request.POST['message_text']
        master_id = int(request.POST['master_id'])
        module_id = int(request.POST['module_id'])
        module_name = str(request.POST['module_name'])

        if master_id > 0 and module_id > 0 and module_name !='':
            message_data ={
                            'module_id':module_id, 'master_id':master_id, 'module_name':module_name,
                            'summary':message_text, 'action':None, 'next_activity':'send_email',
                            'next_activity_date':None, 'next_activity_reminder':None
                          }
            message_obj = db_save_message(request, message_data)
            for email in send_to:
               contact_data = Contact.get_contact_by_email(email, company_id)
               if contact_data:
                   contact_ids.append(contact_data.id)
               else:
                    contact = Contact(name=email, email=email, profile_image=settings.DEFAULT_PROFILE_IMAGE, user_id=request.user.id, user_company_id=request.user.profile.company_id)
                    contact.save()
                    contact_ids.append(contact.id)
            if len(contact_ids) > 0:
                for contact in contact_ids:
                    mapping= MessageContactMap(message_id=message_obj.id, contact_id=contact)
                    mapping.save()

            if len(send_to):
                util = Utils()
                util.sent_email_from_messgage(sender_email, send_to, message_text)
                return_status = {'success': True}

    return HttpResponse(json.dumps(return_status), content_type="application/json")