__init__.py 6.52 KB
from opensipkd.base.models import Departemen, User
from opensipkd.base.tools.api import auth_from_rpc, check_token_rpc, update_token, JsonRpcParameterNotFound
from pyramid_rpc.jsonrpc import jsonrpc_method
from opensipkd.pasar.models import DepartemenProduk, Produk, PartnerProduk

from opensipkd.pasar.models import ProdukCategory

from opensipkd.base.views import BaseView


@jsonrpc_method(method='get_product', endpoint='api-merchant')
def get_product(request, token, data ):
    """
    Digunakan untuk mendapatkan daftar produk
    :param request:
    :param data:
        {
            product_kd: string, //optional
            page:integer, //optional
            length:integer, //optional
            category:string, //optional
            search:string //optional
        }
    :return: [
      {
        product_kd:string,
        product_nm:string,
        harga:integer
      }

    ]
    """
    auth_from_rpc(request)
    i =0
    qry = DepartemenProduk.query() \
        .filter(Departemen.kode == '100000')
    for dat in data:
        page = 'page' in dat and dat['page'] or 1
        length = 'length' in dat and dat['length'] or 5
        product_kd = 'product_kd' in dat and dat['product_kd'] or None
        search = 'search' in dat and dat['search'] or None
        category = 'category' in dat and dat['category'] or None
        if product_kd :
            rst = qry.join(Produk).filter(Produk.kode == product_kd)
        elif search:
            rst = qry.join(Produk).filter(Produk.nama.ilike("".join(['%',search,'%' ])))
        elif category:
            rst = qry.join(Produk).join(ProdukCategory) \
                .filter(ProdukCategory.nama.ilike("".join(['%',category,'%' ])))
        else:
             rst = qry

        rst = rst.limit(length).offset((page-1)*length)
        result = []
        for row in rst.all():
            result.append(dict(product_kd=row.produk.kode,
                               produk_nm=row.produk.nama,
                               harga=row.harga ))
        r_data = dat
        r_data.update(dict(data=result))
        data[i]=r_data
        i += 1
    return data

@jsonrpc_method(method='get_biaya', endpoint='api-merchant')
def get_biaya(request, data, token=None):
    """
        Digunakan untuk mencari methode pembayaran dan biaya layanan
        :param request:
        :param data:
            {
                biaya_kd: string,
                harga:integer,
                cname:string,
                cid:string,
                cvv:string, optional
            }
        :param token:
            user_token
        :return:
          {
            product_kd:string,
            product_nm:string,
            harga:integer
          }
        """

    user = auth_from_rpc(request, token)
    i =0
    qry = DepartemenProduk.query() \
        .filter(Departemen.kode == '100000')
    for dat in data:
        product_kd = 'biaya_kd' in dat and dat['biaya_kd'] or None
        cid  = 'cid' in dat and dat['cid'] or None
        if not product_kd :
            raise JsonRpcParameterNotFound(message='Paramter product_kd wajib di isi')

        rst = qry.join(Produk).filter(Produk.kode == product_kd)
        result = []
        for row in rst.all():
            if row.is_cid and not cid:
                raise JsonRpcParameterNotFound(message="Parameter cid wajib di isi")
            if row.produk.fixed:
                harga = row.harga
            else:
                harga = dat['harga']*row.harga

            result.append(dict(biaya_kd=row.produk.kode,
                               produk_nm=row.produk.nama,
                               harga=harga))

        r_data = dat
        r_data.update(dict(data=result))
        data[i]=r_data
        i += 1
    return data


@jsonrpc_method(method='inquiry', endpoint='api-merchant')
def inquiry(request, token, data ):
    """
    Digunakan untuk mendapatkan daftar produk
    :param request:
    :param data:
        {
            product_kd: string, //optional
            cid:string //optional
        }
    :param token:
        user_token
    :return:
      {
        product_kd:string,
        product_nm:string,
        harga:integer,
        admin:integer,
        discount:integer
      }

    """
    auth_from_rpc(request)
    i =0
    qry = DepartemenProduk.query() \
        .filter(Departemen.kode == '100000')
    dat = data and data is list and data[0] or data
    for dat in data:
        product_kd = 'product_kd' in dat and dat['product_kd'] or None
        cid  = 'cid' in dat and dat['cid'] or None
        if not product_kd :
            raise JsonRpcParameterNotFound(message='Paramter product_kd wajib di isi')

        rst = qry.join(Produk).filter(Produk.kode == product_kd)
        result = []
        for row in rst.all():
            if row.is_cid and not cid:
                raise JsonRpcParameterNotFound(message="Parameter cid wajib di isi")

            result.append(dict(product_kd=row.produk.kode,
                               produk_nm=row.produk.nama,
                               harga=row.harga ))

        r_data = dat
        r_data.update(dict(data=result))
        data[i]=r_data
        i += 1
    return data


@jsonrpc_method(method='payment', endpoint='api-merchant')
def payment(request, token, data):
    """
    Digunakan untuk mendapatkan daftar produk
    :param request:
    :param data:
        {
            product_kd: string,
            cid:string
            payment_kd: string optional
        }
    :param token:
        user_token
    :return:
      {
        product_kd:string,
        product_nm:string,
        harga:integer,
        admin:integer,
        discount:integer
      }
    """
    auth_from_rpc(request, token)
    i = 0
    qry = DepartemenProduk.query() \
        .filter(Departemen.kode == '100000')
    dat = data and data is list and data[0] or data
    for dat in data:
        product_kd = 'product_kd' in dat and dat['product_kd'] or None
        cid = 'cid' in dat and dat['cid'] or None
        if not product_kd:
            raise JsonRpcParameterNotFound(message='Paramter product_kd wajib di isi')

        rst = qry.join(Produk).filter(Produk.kode == product_kd)
        result = []
        for row in rst.all():
            if row.is_cid and not cid:
                raise JsonRpcParameterNotFound(message="Parameter cid wajib di isi")

            result.append(dict(product_kd=row.produk.kode,
                               produk_nm=row.produk.nama,
                               harga=row.harga))

        r_data = dat
        r_data.update(dict(data=result))
        data[i] = r_data
        i += 1
    return data