Exemple #1
0
def sign_contract(request, partner_id=None, template_name='contract.html', context={}):
    if request.is_ajax():
        if request.method == "POST":
            if request.POST.get('oper') == 'upload':
                form = ContractForm(request.POST, initial={'cer_file': fake_field_file, 'key_file': fake_field_file})
                contract_id = request.POST.get('contract_id')
                if form.is_valid():
                    if request.FILES and request.FILES.get('cer_file') and request.FILES.get('key_file'):

                        #   Obtenemos el objecto Contract
                        contract = Contract.objects.get(id=contract_id)
                        passphrase = request.POST.get('password')
                        #   Hacemos el upload del archivo
                        cer_file_path, cer_file_name = save_file(settings.AGR_STORAGE_PATH,
                            request.FILES.get('cer_file'),
                                'tmp', contract_id)
                        key_file_path, key_file_name = save_file(settings.AGR_STORAGE_PATH,
                            request.FILES.get('key_file'),
                                'tmp', contract_id)
                        #   Aqui las validaciones con manifiesto-utilities.py
                        cert_file = M2Crypto.X509.load_cert(cer_file_path, M2Crypto.X509.FORMAT_DER)

                        key_cert_must_match, files_tuple = utilities.verify_cert_key_match(cer_file_name, key_file_name, passphrase)
                        if not key_cert_must_match:
                            for file in files_tuple:
                                try:
                                    os.remove(file)
                                except:
                                    pass
                            response = {
                                'success': False,
                                'message': 'Verify that the certificate and the key match',
                            }
                            response = json.dumps(response)
                            return HttpResponse(response)

                        cert_is_fiel = utilities.FielValidator(cert_file)
                        deserialize_validation = json.loads(json.dumps(cert_is_fiel.is_valid()))
                        if cert_is_fiel.is_fiel:   # Si el archivo si es FIEL
                            cert_signed_by_sat = utilities.SignedSATAuthority(cert_file)
                            deserialize_validation = json.loads(json.dumps(cert_signed_by_sat.is_valid()))
                            if deserialize_validation['success']:   # Si el archivo si esta firmado por el SAT
                                cert_date_is_valid = utilities.CertificateExpiration(cert_file)
                                deserialize_validation = json.loads(json.dumps(cert_date_is_valid.is_valid()))
                                if cert_date_is_valid.valid:
                                    files_signed_created = utilities.gen_digital_seal(contract, files_tuple[0], files_tuple[2], passphrase, partner_id, contract.taxpayer_id)
                                    #print "files_signed_created", files_signed_created
                                    if files_signed_created:
                                        # Webservice sign_contract
                                        ws = AgreementWS()
                                        try:
                                            if partner_id == settings.SN_FINKOK:
                                                partner_id = None
                                            #print "sign_contract"
                                            ws.sign_contract(partner_id=partner_id, taxpayer_id=request.POST.get('rfc_person'))
                                        except:
                                            #print "error sign_contract"
                                            pass

                                        for file in files_tuple:
                                            try:
                                                os.remove(file)
                                            except:
                                                pass

                                        response = {
                                            'success': True,
                                            'message': '',
                                            'uuid': str(contract.uuid),
                                            'taxpayer_id': str(contract.taxpayer_id),
                                            'partner_id': request.POST.get('partner_id'),
                                        }
                                        response = json.dumps(response)
                                        return HttpResponse(response)
                                    else:
                                        for file in files_tuple:
                                            try:
                                                os.remove(file)
                                            except:
                                                pass
                                        response = {
                                            'success': False,
                                            'message': u'No se ha podido firmar su manifiesto',
                                        }
                                        response = json.dumps(response)
                                        return HttpResponse(response)
                                else:
                                    for file in files_tuple:
                                        try:
                                            os.remove(file)
                                        except:
                                            pass
                                    response = {
                                        'success': False,
                                        'message': deserialize_validation['message'],
                                    }
                                    response = json.dumps(response)
                                    return HttpResponse(response)
                            else:
                                for file in files_tuple:
                                    try:
                                        os.remove(file)
                                    except:
                                        pass
                                response = {
                                    'success': False,
                                    'message': deserialize_validation['message'],
                                }
                                response = json.dumps(response)
                                return HttpResponse(response)
                        else:
                            for file in files_tuple:
                                try:
                                    os.remove(file)
                                except:
                                    pass
                            response = {
                                'success': False,
                                'message': deserialize_validation['message'],
                            }
                            response = json.dumps(response)
                            return HttpResponse(response)
                else:
                    response = {
                        'success': False,
                        'errors': dict(form.errors.items())
                    }
                    response = json.dumps(response)
                    return HttpResponse(response)

            if request.POST.get('oper') == 'save':
                #User not signed contract
                form = ContractForm(request.POST, initial={'cer_file': fake_field_file, 'key_file': fake_field_file})
                first_invoice = request.POST.get('first_invoice')
                if form.is_valid():
                    contract = Contract(
                        partner_uuid=form.cleaned_data['partner_id'],
                        name=form.cleaned_data['name'],
                        taxpayer_id=form.cleaned_data['rfc_person'],
                        address=form.cleaned_data['address'],
                        email=form.cleaned_data['email'],
                        first_invoice=first_invoice,
                        )
                    contract.save()
                    response = {
                        'success': True,
                        'contract_id': contract.id
                    }
                    response = json.dumps(response)
                    return HttpResponse(response)
                else:
                    response = {
                        'success': False,
                        'errors': dict(form.errors.items())
                    }
                    response = json.dumps(response)
                    return HttpResponse(response)

            if request.POST.get('oper') == 'verify':
                ## Verify user if kinkok client
                ws = AgreementWS()
                if partner_id == settings.SN_FINKOK:
                    user_valid = ws.verify_user(snid=None, taxpayer_id=request.POST.get('rfc_person'))
                else:
                    user_valid = ws.verify_user(snid=partner_id, taxpayer_id=request.POST.get('rfc_person'))

                try:
                    error = user_valid['error']
                    if error == "Invalid Token":
                        error = {'rfc_person': 'Error en el servidor'}
                    if error == "Account was not Found":
                        error = {'rfc_person': 'Este usuario no esta en nuestro sistema'}
                    response = {
                        'success': False,
                        'errors': error,
                    }
                    response = json.dumps(response)
                    return HttpResponse(response)

                except:
                    user = user_valid['contract']
                    if user:
                        # Ya firmo el contrato
                        contracts = Contract.objects.filter(taxpayer_id=request.POST.get('rfc_person'))
                        contract = contracts[0]
                        error = {'rfc_person': 'Este usuario ya firmo el manifiesto'}
                        response = {
                            'success': False,
                            'errors': error,
                            'prev_signed': 'ok',
                            'partner_id': contract.partner_uuid,
                            'taxpayer_id': contract.taxpayer_id,
                            'uuid': str(contract.uuid),
                        }
                    else:
                        #No ha firmado el contrato y es un usuario valido
                        date_time = user_valid['datetime']
                        from datetime import datetime
                        first_contract = datetime(year=2014, month=1, day=1)

                        try:
                            if first_contract < date_time:
                                date_to_sign_contract = date_time
                            else:
                                date_to_sign_contract = first_contract
                        except:
                            #print "date error"
                            pass

                        response = {
                            'success': True,
                            'date_time': str(date_to_sign_contract),
                        }
                    response = json.dumps(response)
                    return HttpResponse(response)

        else:
            response = {
                'success': False,
                'message': 'You cant access this via GET and Ajax'
            }
            response = json.dumps(response)
            return HttpResponse(response)
    else:
        ws = AgreementWS()
        snid = partner_id
        if not partner_id:
            partner_id = settings.SN_FINKOK
        client = ws.sn_info(snid)
        form = ContractForm(initial={'partner_id': partner_id})
        context = {
            'form': form,
            'client': client,
            'snid': snid,
        }

    response = render_to_response(template_name,
        context_instance=RequestContext(
            request,
            context
        ))
    return HttpResponse(response)
Exemple #2
0
def admin(request, partner_id=None, template_name='admin.html', context={}):
    if request.POST.get('logout'):
        context = {
            'show_login': 1,
            'show_data': 0,
        }
        response = render_to_response(template_name,
        context_instance=RequestContext(
            request,
            context,
        ))

        response.set_cookie('usr', '')
        response.set_cookie('passwd', '')
        response.set_cookie('snid', '')
        response.set_cookie('valid', 0)
        return response

    if request.GET.get('sEcho'):
        ws = AgreementWS()
        user = request.COOKIES['usr']
        passwd_enc = request.COOKIES['passwd']
        passwd = utilities.pycripto_function_dec(passwd_enc)
        snid = request.COOKIES['snid']
        users_ws = ws.users(snid, user, passwd)
        start = int(request.GET.get('iDisplayStart'))
        length = int(request.GET.get('iDisplayLength'))
        rows = []
        contracts_sw = users_ws['users']['ContractUser']
        total = len(contracts_sw)
        for contract in contracts_sw:
            try:
                obj_contract = Contract.objects.get(taxpayer_id=contract.taxpayer_id)
            except:
                obj_contract = None

            if obj_contract:
                try:
                    signed_date = obj_contract.signed_date.strftime("%B %d, %Y")
                    name_client = obj_contract.name
                except:
                    signed_date = "date_error"
                    name_client = obj_contract.name
                    pass
            else:
                signed_date = '-'
                name_client = '-'
            rows.append([
                "<form id='form_%s' action='/app/invoices/add/' method='POST' >"
                "<input type='checkbox' name=id id='%s'/>"
                "<input type='hidden' name='value' value='%s' id='%s'/></form>"
                % (contract.taxpayer_id, contract.taxpayer_id, contract.taxpayer_id, contract.taxpayer_id),
                '<span>%s</span>' % name_client,
                '<span>%s</span>' % contract.taxpayer_id,
                '<span>%s</span>' % signed_date,
                '<span class="contract_%s"></span>' % contract.contract,
            ])
        rows = rows[start:start + length]
        result = {
            'aaData': rows,
            'iTotalRecords': total,
            'iTotalDisplayRecords': total,
        }
        result = json.dumps(result)
        return HttpResponse(result)

    try:
        if request.COOKIES['valid'] == '1':
            context = {
                'show_login': 0,
                'show_data': 1,
                'snid': request.COOKIES['snid'],
            }
            response = render_to_response(template_name,
            context_instance=RequestContext(
                request,
                context,
            ))
            return HttpResponse(response)
    except:
        pass

    if request.method == "POST":
        ws = AgreementWS()
        snid = partner_id
        user = request.POST.get('admin_usr')
        passwd = request.POST.get('admin_pass')
        users_ws = ws.users(snid, user, passwd)
        try:
            if users_ws['error'] == "Invalid Token":
                context = {
                    'error': 'Usuario o password incorrecto',
                    'show_login': 1,
                    'show_data': 0,
                }
                response = render_to_response(template_name,
                context_instance=RequestContext(
                    request,
                    context,
                ))
                return HttpResponse(response)
        except:
                context = {
                    'show_login': 0,
                    'show_data': 1,
                    'snid': snid,
                }
                response = render_to_response(template_name,
                context_instance=RequestContext(
                    request,
                    context,
                ))

                response.set_cookie('usr', user)
                response.set_cookie('passwd', utilities.pycripto_function(passwd))
                response.set_cookie('snid', partner_id)
                response.set_cookie('valid', 1)
                return response

    context = {
        'show_login': 1,
        'show_data': 0,
    }
    response = render_to_response(template_name,
        context_instance=RequestContext(
            request,
            context,
        ))
    return HttpResponse(response)