Beispiel #1
0
def GetIdDomicilio(id_cliente):
    cliente = Modelo()
    filtro = [['id', '=', id_cliente]]
    fields = ['x_iddomicilio']
    ret = cliente.search('res.partner', filtro, fields)
    if ret and ret[0]:
        return ret[0]['x_iddomicilio']
    else:
        return False
Beispiel #2
0
def ProductosUpdate(adapter, fi, ff, idvendedor, token, debug=False):
    ret = False
    logger.info('>>> Chequeando si hay productos con updates ...')
    productos = Modelo()
    filtro = [['write_date', '>=', fi], ['write_date', '<=', ff],
              ['active', '=', True]]
    fields = [
        'id', 'default_code', 'list_price', 'categ_id', 'name', 'tag_ids',
        'seller_id', 'product_variant_ids'
    ]
    retorno = productos.search('product.template', filtro, fields, None)

    if len(retorno) > 0:
        if debug:
            logger.info('respuesta odoo: %s', str(retorno))
            logger.info('cantidad de productos: %s', str(len(retorno)))
        tupla = []
        for item in retorno:
            id_producto = item['product_variant_ids']
            codigo_interno = str(item['default_code'])
            name_producto = str(item['name']).strip()
            name_productor = item['seller_id'][1]
            name_categoria = str(item['categ_id'][1]).strip()
            importe = item['list_price']

            param_tupla = {}
            param_tupla['nombreProducto'] = str(
                GetNameProducto(id_producto)[0]['name_template']).strip()
            param_tupla['codigoInterno'] = codigo_interno
            param_tupla['nombreProductor'] = name_productor

            sellos = []
            for sello in item['tag_ids']:
                sellos.append(GetSelloProductos(sello))

            param_tupla['sellos'] = sellos
            param_tupla['categoria'] = name_categoria
            param_tupla['precio'] = importe
            tupla.append(param_tupla)

        param = {}
        param['idVendedor'] = idvendedor
        param['token'] = token
        param['variantes'] = tupla

        respuesta = adapter.actualizarProductos(param)

        if respuesta.status_code == 200:
            ret = True
        else:
            ret = False

    return ret
Beispiel #3
0
def ActualizarDomicilio(adapter,
                        id_domicilio,
                        id_cliente_odoo,
                        token,
                        debug=False):
    param = {}
    param['id'] = id_domicilio
    param['token'] = token

    if debug:
        logger.info('>>> Parametros enviados: %s', str(param))
    resp = adapter.datosDireccion(param)
    if debug:
        logger.info('>>> Codigo respuesta servidor: %s', str(resp.status_code))
    if (resp) and (resp.status_code == 200):
        #llegaron los datos bien
        datos = resp.json()
        if debug:
            logger.info('>>> Datos Recibidos: %s', datos)

        calle = datos['calle']
        altura = datos['altura']
        localidad = datos['localidad']
        codigopostal = datos['codigoPostal']
        id_domicilio = datos['id_Domicilio']

        if debug:
            logger.info('calle: %s', calle)
            logger.info('altura: %s', altura)
            logger.info('localidad: %s', localidad)
            logger.info('codigo Postal: %s', codigopostal)
            logger.info('id_domicilio: %s', str(id_domicilio))

        #editamos el cliente en la tabla res_partner
        #agregar al modelo res_partner el campo personalizado
        # x_iddomicilio de tipo integer que lo usamos para gurdar el id
        vals = {}
        vals['street'] = calle + ' ' + str(altura)
        vals['zip'] = codigopostal
        vals['city'] = localidad
        vals['x_iddomicilio'] = int(id_domicilio)
        clientedomicilio = Modelo()
        retorno = clientedomicilio.update('res.partner', id_cliente_odoo, vals)
        if debug:
            logger.info('ID cliente: %s', str(retorno))

        return retorno
    else:
        #si hay error retorna -1
        return -1
Beispiel #4
0
def Productores(adapter, fi, ff, idvendedor, token, debug=False):
    ret = False
    logger.info('>>> Chequeando si hay productores nuevos o updates ...')
    productores = Modelo()
    filtro = [['write_date', '>=', fi], ['write_date', '<=', ff],
              ['supplier', '=', True]]
    fields = ['id', 'name', 'comment', 'ref', 'category_id']
    retorno = productores.search('res.partner', filtro, fields, None)

    if len(retorno) > 0:
        if debug:
            logger.info('respuesta odoo: %s', str(retorno))
            logger.info('cantidad de productores: %s', str(len(retorno)))
        tupla = []
        for item in retorno:
            if item['comment']:
                comentario = str(item['comment']).strip()
            else:
                comentario = ' '
            if item['ref']:
                referencia = str(item['ref']).strip()
            else:
                referencia = ' '

            sellos = []
            for cate in item['category_id']:
                sellos.append(GetSelloProductor(cate))

            param_tupla = {}
            param_tupla['nombre'] = str(item['name']).strip()
            param_tupla['descripcionLarga'] = referencia
            param_tupla['descripcionCorta'] = comentario
            param_tupla['idSellos'] = sellos
            tupla.append(param_tupla)

        param = {}
        param['idVendedor'] = idvendedor
        param['token'] = token
        param['productores'] = tupla

        respuesta = adapter.actualizarProductores(param)

        if respuesta.status_code == 200:
            ret = True
        else:
            ret = False
    return ret
Beispiel #5
0
def GetSelloProductor(category_id):
    categoria = Modelo()
    filtro = [['id', '=', category_id]]
    fields = ['name']
    retorno = categoria.search('res.partner.category', filtro, fields)

    ret = None
    if retorno:
        categ = str(retorno[0]['name']).lower().strip()
        if categ == 'cooperativas':
            ret = 1
        elif categ == 'recuperadas':
            ret = 2
        elif categ == 'agricultura familiar':
            ret = 3
        elif categ == 'empresa social':
            ret = 4
        else:
            ret = None
    return ret
Beispiel #6
0
def StockComprometido(adapter, fi, ff, idvendedor, token, debug=False):
    param_tupla = {}
    logger.info('>>> Chequeando stock comprometido sin entregar ...')

    ordenes = Modelo()
    filtro = [
        ['state', 'in', ['progress', 'draft']],
        ['x_origen', '=', 'chasqui'],
    ]
    fields = ['order_line']
    ordenes_ids = ordenes.search('sale.order', filtro, fields, None)
    lineas = []
    if ordenes_ids:
        for i in ordenes_ids:
            lineas += i['order_line']
        ordenes_lines = Modelo()
        filtro = [['id', 'in', lineas]]
        fields = ['product_uos_qty', 'product_id']
        lineas_ids = ordenes_lines.search('sale.order.line', filtro, fields,
                                          None)

        for item in lineas_ids:
            codigo_interno = GetDefaultCode(
                item['product_id'][0])[0]['default_code']
            cantidad = item['product_uos_qty'] * -1

            if param_tupla.has_key(codigo_interno):
                cant = param_tupla[codigo_interno]
                param_tupla[codigo_interno] = cantidad + cant
            else:
                param_tupla[codigo_interno] = cantidad

    return param_tupla
Beispiel #7
0
def GetSelloProductos(etiqueta_id):
    etiqueta = Modelo()
    filtro = [['id', '=', etiqueta_id]]
    fields = ['name']
    retorno = etiqueta.search('product.tag', filtro, fields)

    ret = None
    if retorno:
        etiq = str(retorno[0]['name']).lower().strip()
        if etiq == 'agroecologico':
            ret = 1
        elif etiq == 'organico':
            ret = 2
        elif etiq == 'reciclado':
            ret = 3
        elif etiq == 'artesanal':
            ret = 5
        elif etiq == 'en red':
            ret = 7
        elif etiq == 'kilometro cero':
            ret = 8
        else:
            ret = None
    return ret
Beispiel #8
0
def GetIdPuntoDeRetiro(puntoderetiro):
    titulo = Modelo()
    filtro = [['shortcut', '=', 'puntoderetiro']]
    fields = ['id']
    ret = titulo.search('res.partner.title', filtro, fields)
    if not ret and ret[0]:
        return False
    title_id = ret[0]['id']
    cliente = Modelo()
    filtro = [['name', '=', puntoderetiro], ['title', '=', title_id]]
    fields = ['id']
    ret = cliente.search('res.partner', filtro, fields)
    if ret and ret[0]:
        return ret[0]['id']
    else:
        return False
Beispiel #9
0
def GetProductCateg(id_categoria):
    productcat = Modelo()
    filtro = [['id', '=', id_categoria]]
    fields = ['name']
    retorno = productcat.search('product.category', filtro, fields)
    return retorno
Beispiel #10
0
def CrearPedidos(adapter, fi, ff, idvendedor, token, debug=False):
    logger.info('>>> Chequeando si hay pedidos ...')
    param = {}
    param['idVendedor'] = idvendedor
    param['fechaInicial'] = fi
    param['fechaFinal'] = ff
    param['token'] = token
    error = False
    retorno = 0

    if debug:
        logger.info('>>> Parametros Enviados: %s', str(param))
    resp = adapter.nuevosPedidosIndividuales(param)
    if debug:
        logger.info('Codigo respuesta servidor: %s', str(resp.status_code))

    if (resp) and (resp.status_code == 200):
        #llegaron los datos bien
        datos = resp.json()
        print datos
        if debug:
            logger.info('>>> Datos Recibidos: %s', datos)

        pedidoRX = datos['pedidoClienteDomicilio']
        cantidadpedidos = len(pedidoRX)

        if debug:
            logger.info('>>> Cantidad de Pedido Recibidos: %s',
                        str(cantidadpedidos))

        if cantidadpedidos > 0:
            #hay pedidos nuevos
            for pedido in pedidoRX:
                id_pedido = pedido['id_Pedido']
                id_cliente = pedido['id_Cliente']
                alias_puntoderetiro = pedido['alias_PuntoDeRetiro']
                id_domicilio = pedido['id_Domicilio']
                productosRX = pedido['cantidadesProductoResponse']

                #chequeamos si existe el cliente
                existecliente = GetIdCliente(id_cliente)
                if not existecliente:
                    #si no existe lo creamos
                    agregarcliente = AgregarCliente(adapter, id_cliente, token,
                                                    debug)
                    if agregarcliente != -1:
                        odoo_clienteid = agregarcliente
                        if debug:
                            logger.info(
                                '>>> El cliente se creo correctamente: %s',
                                id_cliente)
                    else:
                        if debug:
                            logger.warning('>>> Error al crear el cliente: %s',
                                           id_cliente)
                        error = True
                else:
                    odoo_clienteid = int(existecliente[0]['id'])

                #el cliente lo retira en un punto de retiro
                if alias_puntoderetiro == None:
                    partner_shipping_id = odoo_clienteid
                else:
                    punto_r = str(alias_puntoderetiro).strip()
                    partner_shipping_id = GetIdPuntoDeRetiro(punto_r)

                #chequeamos la direccion del cliente y si es distinta la editamos
                ret = GetIdDomicilio(odoo_clienteid)
                if ret != id_domicilio:
                    ActualizarDomicilio(adapter, id_domicilio, odoo_clienteid,
                                        token, debug)
                    if debug:
                        logger.info(
                            '>>> Actualizando el domicilio del cliente: %s',
                            id_cliente)

                #chequeamos si el pedido ya existe
                if not GetIdPedido(id_pedido):
                    logger.info('>>> Agregando pedidos nuevos ...')
                    vals = {
                        'origin': str(id_pedido),
                        'x_origen': 'chasqui',
                        'partner_id': odoo_clienteid,
                        'pricelist_id': 1,
                        'partner_invoice_id': odoo_clienteid,
                        'partner_shipping_id': partner_shipping_id,
                        'state': 'draft',
                    }

                    items_prod = []
                    for producto in productosRX:
                        odoo_productoid = GetIdProducto(
                            producto['cod_Producto'])[0]['id']
                        id_producto = producto['id_Producto']
                        precio = producto['precio']
                        cantidadpedida = producto['cantidadPedida']

                        items_prod.append((0, 0, {
                            'product_id': odoo_productoid,
                            'product_uom_qty': cantidadpedida,
                            'qty_delivered': cantidadpedida,
                            'price_unit': precio
                        }))
                    vals['order_line'] = items_prod

                    saleorder = Modelo()
                    retorno = saleorder.create('sale.order', vals)

                    if debug:
                        logger.info('id_pedido: %s', str(id_pedido))
                        logger.info('id_cliente: %s', str(id_cliente))
                        logger.info('alias_puntoderetiro: %s',
                                    str(alias_puntoderetiro))
                        logger.info('id_domicilio: %s', str(id_domicilio))
                        logger.info('items: %s', str(items_prod))

                else:
                    if debug:
                        logger.warning('>>> error el pedido ya existe')
                    error = True
        else:
            return 0

    else:
        error = True

    if error:
        return -1
    else:
        return retorno
Beispiel #11
0
def CrearPedidosColectivos(adapter, fi, ff, idVendedor, token, debug=False):
    logger.info('>>> Chequeando si hay pedidos Colectivos ...')
    param = {}
    param['idVendedor'] = idVendedor
    param['fechaInicial'] = fi
    param['fechaFinal'] = ff
    param['token'] = token
    error = False
    retorno = 0

    if debug:
        logger.info('>>> Parametros enviados: %s', str(param))
    resp = adapter.nuevosPedidosColectivos(param)
    if debug:
        logger.info('>>> Codigo respuesta servidor: %s', str(resp.status_code))

    if (resp) and (resp.status_code == 200):
        #llegaron los datos bien
        datos = resp.json()
        if debug:
            logger.info('>>> Datos Recibidos: %s', datos)
        pedidosRX = datos['pedidosColectivos']
        cantidadpedidos = len(pedidosRX)

        if debug:
            logger.info('>>> Cantidad de Pedido Recibidos: %s',
                        str(cantidadpedidos))
        if cantidadpedidos > 0:
            #hay pedidos nuevos
            for pedido in pedidosRX:
                logger.info('>>> Agregando Pedidos Colectivos ...')
                aliasPuntoDeRetiro = pedido['aliasPuntoDeRetiro']
                aliasNodo = pedido['aliasNodo']
                id_domicilio = pedido['id_Domicilio']
                emailCoordinador = pedido['emailCoordinador']
                pedidosIndividuales = pedido['pedidosIndividuales']

                #chequeamos si existe el cliente coordinador a recibir el pedido
                #si no existe lo creamos
                cliente_coodinador = GetIdCliente(emailCoordinador)
                if not cliente_coodinador:
                    #si no existe lo creamos
                    agregarcliente = AgregarCliente(adapter, emailCoordinador,
                                                    token, debug)
                    if agregarcliente != -1:
                        odoo_clienteid_coordinador = agregarcliente
                        if debug:
                            logger.info(
                                '>>> El cliente coordinador se creo correctamente: %s',
                                emailCoordinador)
                    else:
                        if debug:
                            logger.warning(
                                '>>> Error al crear el cliente coordinador: %s',
                                emailCoordinador)
                        error = True
                else:
                    odoo_clienteid_coordinador = int(
                        cliente_coodinador[0]['id'])

                #chequeamos la direccion del cliente coordinador y si es distinta la editamos
                ret = GetIdDomicilio(odoo_clienteid_coordinador)
                if ret != id_domicilio:
                    ActualizarDomicilio(adapter, id_domicilio,
                                        odoo_clienteid_coordinador, token,
                                        debug)
                    if debug:
                        logger.info(
                            '>>> Actualizando el domicilio del cliente coordinador: %s',
                            emailCoordinador)

                if debug:
                    logger.info('aliasPuntoDeRetiro: %s', aliasPuntoDeRetiro)
                    logger.info('aliasNodo: %s', aliasNodo)
                    logger.info('id_Domicilio: %s', id_domicilio)
                    logger.info('emailCoordinador: %s', emailCoordinador)

                if len(pedidosIndividuales) > 0:
                    items_pedidos = []
                    for item in pedidosIndividuales:
                        clientes = item['pedidos'].keys()
                        for i in clientes:
                            if debug:
                                logger.info('Cliente: %s', i)

                            #chequeamos si existe el cliente
                            #si no existe lo creamos
                            cliente_id = GetIdCliente(i)
                            if not cliente_id:
                                #si no existe lo creamos
                                agregarcliente = AgregarCliente(
                                    adapter, i, token, debug)
                                if agregarcliente != -1:
                                    odoo_clienteid = agregarcliente
                                    if debug:
                                        logger.info(
                                            '>>> El cliente se creo correctamente: %s',
                                            i)
                                else:
                                    if debug:
                                        logger.warning(
                                            '>>> Error al crear el cliente: %s',
                                            i)
                                    error = True
                            else:
                                odoo_clienteid = int(cliente_id[0]['id'])

                            #creamos la orden de venta
                            logger.info(
                                '>>> Agregando pedidos colectivos nuevos ...')
                            vals = {
                                'origin': 'Pedido Colectivo',
                                'x_origen': 'chasqui',
                                'partner_id': odoo_clienteid,
                                'pricelist_id': 1,
                                'partner_invoice_id': odoo_clienteid,
                                'partner_shipping_id':
                                odoo_clienteid_coordinador,
                                'state': 'draft',
                            }

                            items_prod = []
                            for producto in item['pedidos'][i]:
                                odoo_productoid = GetIdProducto(
                                    producto['cod_Producto'])[0]['id']
                                id_producto = producto['id_Producto']
                                precio = producto['precio']
                                cantidadpedida = producto['cantidadPedida']

                                items_prod.append((0, 0, {
                                    'product_id': odoo_productoid,
                                    'product_uom_qty': cantidadpedida,
                                    'qty_delivered': cantidadpedida,
                                    'price_unit': precio
                                }))
                            vals['order_line'] = items_prod

                            saleorder = Modelo()
                            retorno = saleorder.create('sale.order', vals)

                            if debug:
                                logger.info('Productos: %s', str(items_prod))

                else:
                    return 0
    else:
        error = True

    if error:
        return -1
    else:
        return retorno
Beispiel #12
0
def GetIdPedido(id_pedido):
    pedido = Modelo()
    filtro = [['origin', '=', id_pedido]]
    fields = ['id']
    return pedido.search('sale.order', filtro, fields)
Beispiel #13
0
def GetIdProducto(cod_Producto):
    producto = Modelo()
    filtro = [['default_code', '=', cod_Producto]]
    fields = ['id']
    return producto.search('product.product', filtro, fields)
Beispiel #14
0
def AgregarCliente(adapter, email, token, debug=False):
    param = {}
    param['id'] = email
    param['token'] = token

    if debug:
        logger.info('>>> Parametros enviados: %s', str(param))
    resp = adapter.datosCliente(param)
    if debug:
        logger.info('>>> Codigo respuesta servidor: %s', str(resp.status_code))
    if (resp) and (resp.status_code == 200):
        #llegaron los datos bien
        datos = resp.json()
        if debug:
            logger.info('>>> Datos Recibidos: %s', datos)
        apellido = datos['apellido']
        nombre = datos['nombre']
        email = datos['email']
        telefonoMovil = datos['telefonoMovil']
        telefonoFijo = datos['telefonoFijo']
        id_cliente = datos['id']
        direcciones = datos['direcciones']

        if direcciones and direcciones[0]:
            calle = direcciones[0]['calle']
        else:
            calle = 's/d'
        if direcciones and direcciones[0]:
            localidad = direcciones[0]['localidad']
        else:
            localidad = 's/d'
        if direcciones and direcciones[0]:
            codigoPostal = direcciones[0]['codigoPostal']
        else:
            codigoPostal = 's/d'
        if direcciones and direcciones[0]:
            altura = direcciones[0]['altura']
        else:
            altura = 's/d'
        if direcciones and direcciones[0]:
            id_domicilio = direcciones[0]['id_Domicilio']
        else:
            id_domicilio = 0

        if debug:
            logger.info('apellido: %s', apellido)
            logger.info('nombre: %s', nombre)
            logger.info('email: %s', email)
            logger.info('telefonoMovil: %s', telefonoMovil)
            logger.info('telefonoFijo: %s', telefonoFijo)
            logger.info('id_Cliente: %s', id_cliente)
            logger.info('id_Domicilio: %s', id_domicilio)
            logger.info('direcciones: %s', direcciones)

        #agregamos el cliente a la tabla res_partner
        #agregar al modelo res_partner el campo
        # x_iddomicilio de tipo integer
        vals = {}
        vals['name'] = apellido + ', ' + nombre
        vals['company_id'] = 1
        vals['street'] = calle + ' ' + str(altura)
        vals['zip'] = codigoPostal
        vals['city'] = localidad
        vals['email'] = email
        vals['phone'] = telefonoFijo
        vals['mobile'] = telefonoMovil
        vals['x_iddomicilio'] = int(id_domicilio)  #este campo es personalizado
        clientenew = Modelo()
        retorno = clientenew.create('res.partner', vals)

        if debug:
            logger.info('ID cliente: %s', str(retorno))

        return retorno
    else:
        #si hay error retorna -1
        return -1
Beispiel #15
0
def GetIdCliente(email):
    cliente = Modelo()
    filtro = [['email', '=', email]]
    fields = ['id']
    return cliente.search('res.partner', filtro, fields)
Beispiel #16
0
def GetProductor(id_productor):
    productor = Modelo()
    filtro = [['product_tmpl_id', '=', id_productor]]
    fields = ['name']
    retorno = productor.search('product.supplierinfo', filtro, fields)
    return retorno
Beispiel #17
0
def GetStockLocation(id_location):
    location = Modelo()
    filtro = [['name', '=', id_location]]
    fields = ['id', 'name', 'complete_name']
    retorno = location.search('stock.location', filtro, fields, None)
    return retorno
Beispiel #18
0
def GetTemplate(id_template):
    template = Modelo()
    filtro = [['id', '=', id_template]]
    fields = ['name', 'list_price', 'categ_id', 'tag_id']
    retorno = template.search('product.template', filtro, fields)
    return retorno
Beispiel #19
0
def CheckStock(adapter, fi, ff, idvendedor, token, debug=False):
    ret = False
    logger.info('>>> Chequeando stock ...')

    location = GetStockLocation('Chasqui')
    if location:
        productos = Modelo()
        filtro = [['location_id', '=', location[0]['id']]]
        fields = ['quantity', 'product_id']
        retorno = productos.search('stock.history', filtro, fields, None)

        if debug:
            logger.info('respuesta odoo stock en deposito chasqui: %s',
                        str(retorno))

        #consulta si hay stock pendiente de entregar en ordenes de ventas sin confirmar
        param_tupla = StockComprometido(adapter,
                                        fi,
                                        ff,
                                        idvendedor,
                                        token,
                                        debug=False)

        if debug:
            logger.info('respuesta odoo stock comprometido chasqui: %s',
                        str(param_tupla))

        for item in retorno:
            codigo_interno = GetDefaultCode(
                item['product_id'][0])[0]['default_code']
            cantidad = item['quantity']

            if param_tupla.has_key(codigo_interno):
                cant = param_tupla[codigo_interno]
                param_tupla[codigo_interno] = cantidad + cant
            else:
                param_tupla[codigo_interno] = cantidad

        if debug:
            logger.info('respuesta odoo stock real chasqui: %s',
                        str(param_tupla))

        tupla = []
        for item in param_tupla:
            dict_prod = {}
            dict_prod['codigoInterno'] = item
            dict_prod['stock'] = param_tupla[item]
            tupla.append(dict_prod)

        if len(tupla) > 0:
            logger.info('>>> Actualizando stock ...')
            param = {}
            param['idVendedor'] = idvendedor
            param['token'] = token
            param['productos'] = tupla

            respuesta = adapter.agregarStockDeProductos(param)

            if respuesta.status_code == 200:
                ret = True
            else:
                ret = False

    return ret
Beispiel #20
0
def GetNameProducto(id_product):
    producto = Modelo()
    filtro = [['id', '=', id_product]]
    fields = ['name_template']
    retorno = producto.search('product.product', filtro, fields)
    return retorno
Beispiel #21
0
def GetDefaultCode(id_product):
    producto = Modelo()
    filtro = [['id', '=', id_product]]
    fields = ['default_code']
    retorno = producto.search('product.product', filtro, fields)
    return retorno