Example #1
0
 def form_valid(self, form):
     item = Item()
     item.codigo_item = form.cleaned_data['codigo_item']
     item.codigo_fabrica = form.cleaned_data['codigo_fabrica']
     item.almacen = form.cleaned_data['almacen']
     item.grupo = form.cleaned_data['grupo']
     item.subgrupo = form.cleaned_data['subgrupo']
     item.descripcion = form.cleaned_data['descripcion']
     item.carac_especial_1 = form.cleaned_data['carac_especial_1']
     item.carac_especial_2 = form.cleaned_data['carac_especial_2']
     item.cantidad = form.cleaned_data['cantidad']
     item.saldo_min = form.cleaned_data['saldo_min']
     item.proveedor = form.cleaned_data['proveedor']
     item.imagen = form.cleaned_data['imagen']
     item.unidad_medida = form.cleaned_data['unidad_medida']
     item.costo_unitario = form.cleaned_data['costo_unitario']
     item.precio_unitario = form.cleaned_data['precio_unitario']
     item.empresa = self.request.user.empresa
     today = date.today()
     movimiento = Movimiento()
     movimiento.cantidad = form.cleaned_data['cantidad']
     movimiento.precio_unitario = form.cleaned_data['precio_unitario']
     movimiento.detalle = 'Saldo Inicial'
     movimiento.fecha_transaccion = today.strftime('%Y-%m-%d')
     movimiento.motivo_movimiento = 'inicial'
     movimiento.empresa = self.request.user.empresa
     try:
         item.save()
     except IntegrityError:
         messages.error(self.request, "error CODIGO ITEM DUPLICADO")
         return self.form_invalid(form)
     movimiento.item = item
     movimiento.save()
     return super(CrearItem, self).form_valid(form)
Example #2
0
def compraCrear(request):

    form = None
    centro_costos = CentroCostos.objects.filter(empresa=request.user.empresa)
    if request.method == 'POST':
        sid = transaction.savepoint()
        try:
            proceso = json.loads(request.POST.get('proceso'))
            if len(proceso['producto']) <= 0:
                msg = 'No se ha seleccionado ningun producto'
                raise Exception(msg)
            # if proceso['nit'] == '':
            #     msg = 'Ingrese nit'
            #     raise Exception(msg)

            total = 0
            # calculo total de compras
            for k in proceso['producto']:
                total += decimal.Decimal(k['sdf'])

            if proceso['tipo_compra'] == 'credito':
                date_1 = datetime.datetime.strptime(proceso['fecha'], "%Y-%m-%d")
                end_date = date_1 + datetime.timedelta(days=int(proceso['dias']))
                today = datetime.date.today()
            else:
                end_date = None

            compra_data = Compra.objects.filter(empresa=request.user.empresa).exclude(nro_nota__isnull=True).last()

            if compra_data:
                nro = compra_data.nro_nota
                if nro is None:
                    nro = 0
            else:
                nro = 0

            print total
            crearCompra = Compra(
                nit=proceso['nit'],
                razon_social=proceso['razon'],
                nro_factura=proceso['nro_factura'],
                nro_autorizacion=proceso['nro_autorizacion'],
                fecha=proceso['fecha'],
                cod_control=proceso['codigo_control'],
                tipo_compra=proceso['tipo_compra'],
                cantidad_dias=proceso['dias'],
                total=total,
                descuento=proceso['descuento'],
                recargo=proceso['recargo'],
                ice=proceso['ice'],
                excentos=proceso['excentos'],
                tipo_descuento=proceso['tipo_descuento'],
                tipo_recargo=proceso['tipo_recargo'],
                empresa=request.user.empresa,
                fecha_vencimiento=end_date,
                nro_nota=nro + 1,

            )
            crearCompra.save()

            for k in proceso['producto']:
                if k['centro_costos'] == 'A':
                    item = Item.objects.filter(id=k['pk'])
                    cantidad_total = item[0].cantidad + int(k['cantidad'])
                    today = date.today()
                    item.update(cantidad=cantidad_total, fecha_transaccion=today)

                    crearDetalle = DetalleCompra(
                        compra=crearCompra,
                        producto=Item.objects.get(id=k['pk']),
                        codigo=k['codigo_item'],
                        cantidad=int(k['cantidad']),
                        unidad=k['unidad'],
                        detalle=k['detalle'],
                        precio_unitario=decimal.Decimal(k['precio_unitario']),
                        subtotal=decimal.Decimal(k['subtotal']),
                        descuento=decimal.Decimal(k['descuentos']),
                        recargo=decimal.Decimal(k['recargos']),
                        ice=decimal.Decimal(k['ice']),
                        excentos=decimal.Decimal(k['excentos']),
                        scf=decimal.Decimal(k['sdf']),
                        centro_costos=k['centro_costos'],
                        tipo_descuento=k['tipo_descuento'],
                        tipo_recargo=k['tipo_recargo'],

                    )

                    detalle = '%s a %s s/g factura Nro. %s' % ('Compra', proceso['razon'], proceso['nro_factura'])

                    crearMovimiento = Movimiento(
                        cantidad=int(k['cantidad']),
                        precio_unitario=decimal.Decimal(k['precio_unitario']),
                        detalle=detalle,
                        fecha_transaccion=proceso['fecha'],
                        motivo_movimiento='ingreso',
                        item=Item.objects.get(id=k['pk']),
                        empresa=request.user.empresa,
                    )

                    crearDetalle.save()
                    crearMovimiento.save()

                else:
                    print 'centro de costossssssss'
                    print k['centro_costos']
                    if CentroCostos.objects.filter(descripcion=k['centro_costos']):
                        pass
                    else:
                        centro = CentroCostos(
                            descripcion=k['centro_costos'],
                            empresa=request.user.empresa
                        )
                        centro.save()

                    crearDetalle = DetalleCompra(
                        compra=crearCompra,
                        codigo=k['codigo_item'],
                        cantidad=int(k['cantidad']),
                        unidad=k['unidad'],
                        detalle=k['detalle'],
                        precio_unitario=decimal.Decimal(k['precio_unitario']),
                        subtotal=decimal.Decimal(k['subtotal']),
                        descuento=decimal.Decimal(k['descuentos']),
                        recargo=decimal.Decimal(k['recargos']),
                        ice=decimal.Decimal(k['ice']),
                        excentos=decimal.Decimal(k['excentos']),
                        scf=decimal.Decimal(k['sdf']),
                        centro_costos=k['centro_costos'],
                        tipo_descuento=k['tipo_descuento'],
                        tipo_recargo=k['tipo_recargo'],

                    )

                    crearDetalle.save()

            # return HttpResponseRedirect(reverse('detallecompra', args=(crearCompra.pk,)))
            return render('compras/compra.html', {'form': form, 'costos': centro_costos, 'popup': True, 'pk': crearCompra.pk, 'url': '/detalle_compra/' }, context_instance=ctx(request))


        except Exception, e:
            try:
                transaction.savepoint_rollback(sid)
            except:
                pass
            messages.error(request, e)
Example #3
0
def import_data(request):
    if request.method == "POST":
        form = UploadFileForm(request.POST,
                              request.FILES)

        # if request.FILES:
        # 	datos=request.FILES['file']
        # 	filename = datos._name
        # 	print filename
        # 	fd = open('%s/%s' % (MEDIA_ROOT, filename), 'wb')
        # 	rute= '%s/%s' % (MEDIA_ROOT, datos)
        # 	for chunk in datos.chunks() :
        # 		fd.write(chunk)
        # 	fd.close()

        # 	dt=pe.get_sheet(file_name='%s' % (rute), name_columns_by_row=0)
        # 	yy=list(dt.colnames)
        # 	print yy
        today = date.today()

        def choice_func(row):
            cod = Proveedor.objects.filter(codigo=row[10])[0]
            row[10] = cod
            row.append(request.user)
            return row

        if form.is_valid():

            print 'ssssssssssssssssssssssssssssssss'
            # arryadates=['codigo_item', 'codigo_fabrica', 'almacen','grupo', 'subgrupo', 'descripcion', 'carac_especial_1', 'carac_especial_2', 'cantidad', 'saldo_min', 'proveedor', 'imagen', 'unidad_medida', 'costo_unitario', 'precio_unitario']
            datos = request.FILES['file']

            # datos2= pe.get_sheet(file_name='%s' % (datos),name_columns_by_row=0)
            # print(list(datos2.colnames))

            # for i in arryadates:
            # 	if i in dt:
            # 		print i
            # 	else:
            # 		print 'falseeeeeeee'

         #    for d in datos2:
        	# print d['codigo_item']
            # print request.FILES['file'].get_sheet()
            filename = datos._name
            fd = open('%s/%s' % (MEDIA_ROOT, filename), 'wb')
            print fd

            for chunk in datos.chunks():
                fd.write(chunk)
            fd.close()

            rute = '%s/%s' % (MEDIA_ROOT, datos)
            book = xlrd.open_workbook(rute)
            sheet = book.sheet_by_name('Sheet1')

            # wb = xlrd.open_workbook(rute)
            # ws = wb.sheet_by_name('Sheet1')
            # for i in range(ws.nrows):
            #     for j in range(ws.ncols):
            #         if ws.cell_type(i, j) != xlrd.XL_CELL_EMPTY:
            #             print ("  (%d, %d):%s:%s" % (i, j, ws.cell_type(i, j), ws.cell_value(i, j)))
            #         else:
            #             print "error"

            try:
                errores = []
                for r in range(1, sheet.nrows):

                    if  Item.objects.filter(codigo_item=sheet.cell(r, 0).value, empresa=request.user.empresa):
                        errores.append('* el codigo_item "%s" ya existe' % (sheet.cell(r, 0).value))

                    if sheet.cell_type(r, 8) != xlrd.XL_CELL_NUMBER:
                        errores.append('* cantidad "%s" tiene que ser numerico' % (sheet.cell(r, 8).value))

                    if sheet.cell_type(r, 9) != xlrd.XL_CELL_NUMBER:
                        errores.append('* saldo_min "%s" tiene que ser numerico' % (sheet.cell(r, 9).value))

                    if sheet.cell_type(r, 11) != xlrd.XL_CELL_TEXT:
                        errores.append('* imagen "%s" tiene que ser texto' % (sheet.cell(r, 11).value))

                    if not Proveedor.objects.filter(codigo=sheet.cell(r, 10).value, empresa=request.user.empresa):
                        errores.append('* el proveedor "%s" no existe en la base de datos' % (sheet.cell(r, 10).value))

                    if sheet.cell_type(r, 13) != xlrd.XL_CELL_NUMBER:
                        errores.append('* costo_unitario "%s" tiene que ser numerico' % (sheet.cell(r, 13).value))

                    if sheet.cell_type(r, 14) != xlrd.XL_CELL_NUMBER:
                        errores.append('* precio_unitario "%s" tiene que ser numerico' % (sheet.cell(r, 14).value))

                for s in range(1, sheet.nrows):

                    if errores:
                        for err in errores:
                            messages.error(request, err)
                            # messages.error(request, ', '.join([str(x) for x in errores]))
                        return render_to_response(
                        'producto/upload_form.html',
                        {
                            'form': form,
                        },
                        context_instance=RequestContext(request))
                    else:

                        crearItem = Item(
                            codigo_item=sheet.cell(s, 0).value,
                            codigo_fabrica=sheet.cell(s, 1).value,
                            almacen=sheet.cell(s, 2).value,
                            grupo=sheet.cell(s, 3).value,
                            subgrupo=sheet.cell(s, 4).value,
                            descripcion=sheet.cell(s, 5).value,
                            carac_especial_1=sheet.cell(s, 6).value,
                            carac_especial_2=sheet.cell(s, 7).value,
                            cantidad=sheet.cell(s, 8).value,
                            saldo_min=sheet.cell(s, 9).value,
                            proveedor=Proveedor.objects.get(codigo=sheet.cell(s, 10).value, empresa=request.user.empresa),
                            imagen=sheet.cell(s, 11).value,
                            unidad_medida=sheet.cell(s, 12).value,
                            costo_unitario=decimal.Decimal(sheet.cell(s, 13).value),
                            precio_unitario=decimal.Decimal(sheet.cell(s, 14).value),
                            empresa=request.user.empresa,
                        )
                        crearItem.save()

                        crearMovimiento = Movimiento(
                            cantidad=sheet.cell(s, 8).value,
                            precio_unitario=decimal.Decimal(sheet.cell(s, 14).value),
                            detalle='Saldo Inicial',
                            fecha_transaccion=date.today(),
                            motivo_movimiento='inicial',
                            item=crearItem,
                            empresa=request.user.empresa,
                        )
                        crearMovimiento.save()

                # try:

                # request.FILES['file'].save_book_to_database(
                #     models=[Item],
                #     initializers=[choice_func],
                #     mapdicts=[['codigo_item', 'codigo_fabrica', 'almacen', 'grupo', 'subgrupo', 'descripcion', 'carac_especial_1', 'carac_especial_2', 'cantidad', 'saldo_min', 'proveedor', 'imagen', 'unidad_medida', 'costo_unitario', 'precio_unitario', 'user']]
                # )

                messages.success(request, "Los datos se importaron correctamente")

                # filename = datos._name
                # # print filename

                # fd = open('%s/%s' % (MEDIA_ROOT, filename), 'wb')

                # for chunk in datos.chunks() :
                #     fd.write(chunk)
                # fd.close()


                return HttpResponseRedirect(reverse_lazy('listar_item'))

            except Exception, e:
	        	messages.error(request, e)