list_vendor.py 6.92 KB
from datetime import datetime

import colander
from datatables import ColumnDT
from deform import widget, Form, ValidationFailure
from opensipkd.base.views import DataTables
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from sqlalchemy import case

from . import BaseView  # , save_file_upload
from ..models import (DBSession, flush_row, PartnerLog, Produk, Partner)
from ..tools import (btn_cancel, btn_delete)

def form_validator(form, value):
    pass

def get_form(request, class_form, buttons=None, row=None):
    schema = class_form(validator=form_validator)
    schema.request = request
    if row:
        schema.deserialize(row)
    return Form(schema, buttons=buttons)

def route_list(request):
    return HTTPFound(location=request.route_url('api-vendor-list'))

form_params_view = dict(scripts="""
$(document).ready(function(){
});
""")

def id_not_found(request):
    id = request.matchdict['id']
    request.session.flash('Data %s Tidak Ditemukan' % id, 'error')
    return route_list(request)

def query_id(request):
    id = request.matchdict['id']
    return PartnerLog.query_id(id)

class ViewData(BaseView):
    @view_config(route_name='api-vendor-list',
                 permission="api-vendor-list",
                 renderer='templates/list.pt')
    def view_list(self):
        params = {'columns': [dict(title="ID"),
                              # dict(title="Customer"),
                              dict(title="Vendor"),
                              dict(title="Nama Produk"),
                              dict(title="ID Pelanggan"),
                              dict(title="TRX Vendor"),
                              dict(title="Nilai Beli"),
                              dict(title="Amount Oth 1"),
                              dict(title="Amount Oth 2"),
                              dict(title="Amount Oth 3"),
                              dict(title="Amount Oth 4"),
                              dict(title="Amount Oth 5"),
                              dict(title="Sub Total"),
                              dict(title="Discount"),
                              dict(title="Nilai Jual"),
                              ],
                  'column_data': [dict(data="id", width="0px"),
                                  # dict(data="customer"),
                                  dict(data="vendor"),
                                  dict(data="produk_nama"),
                                  dict(data="id_pel"),
                                  dict(data="vend_inv_no"),
                                  dict(data="amt_buy"),
                                  dict(data="amt_oth1"),
                                  dict(data="amt_oth2"),
                                  dict(data="amt_oth3"),
                                  dict(data="amt_oth4"),
                                  dict(data="amt_oth5"),
                                  dict(data="subtotal"),
                                  dict(data="discount"),
                                  dict(data="amt_sell"),
                                  ],
                  'buttons': [
                      dict(id="btn_view", cls="btn btn btn-info", title="Detail"),
                      dict(id="btn_delete", cls="btn btn btn-primary", title="Hapus"),
                      dict(id="btn_close", cls="btn btn-danger", title="Tutup"),
                  ],
                  'route': "/api/vendor",
                  'scripts': """

        $('#btn_view').click(function() {
            if (mID) window.location = oTableUri + '/' + mID + '/view';
            else 
            $.SmartMessageBox({
                title : "Detail",
                content : "Pilih Baris yang akan di lihat...",
                buttons : '[Oke]'
            });;
        });

        $('#btn_delete').click(function() {
            if (mID) window.location = oTableUri + '/' + mID + '/delete';
            else 
            $.SmartMessageBox({
                title : "Delete",
                content : "Pilih Baris yang akan di hapus...",
                buttons : '[Oke]'
            });;
        });

        $("#btn_close").click(function() {
            window.location = '/api/merchant';
            return false;
        });
                            """}

        return dict(params=params)

    @view_config(route_name='api-vendor-act', renderer='json',
                 permission="api-vendor-list"
                 )
    def view_act(self):
        request = self.req
        url_dict = request.matchdict
        act = url_dict['act']
        if act == "grid":
            columns = [
                ColumnDT(PartnerLog.id, mData='id'),
                ColumnDT(
                case(
                        whens = (
                            (Partner.is_customer != 0, Partner.nama),
                            (Partner.is_customer == 0, '-'),
                            )
                        )
                ,mData="customer"),
                # ColumnDT(Partner.nama, mData='customer'),
                ColumnDT(Partner.nama, mData='vendor'),
                ColumnDT(Produk.nama, mData='produk_nama'),
                ColumnDT(PartnerLog.id_pel, mData='id_pel'),
                ColumnDT(PartnerLog.vend_inv_no, mData='vend_inv_no'),
                ColumnDT(PartnerLog.amt_buy, mData='amt_buy'),
                ColumnDT(PartnerLog.amt_oth1, mData='amt_oth1'),
                ColumnDT(PartnerLog.amt_oth2, mData='amt_oth2'),
                ColumnDT(PartnerLog.amt_oth3, mData='amt_oth3'),
                ColumnDT(PartnerLog.amt_oth4, mData='amt_oth4'),
                ColumnDT(PartnerLog.amt_oth5, mData='amt_oth5'),
                ColumnDT(PartnerLog.subtotal, mData='subtotal'),
                ColumnDT(PartnerLog.discount, mData='discount'),
                ColumnDT(PartnerLog.amt_sell, mData='amt_sell'),
            ]

            query = DBSession.query().select_from(PartnerLog).join(Produk, Produk.id == PartnerLog.produk_id).join(Partner, Partner.id == PartnerLog.vendor_id).\
                filter(Partner.id == PartnerLog.vendor_id)
            row_table = DataTables(request.GET, query, columns)
            return row_table.output_result()

    @view_config(route_name='api-vendor-delete',
                 renderer='templates/form.pt',
                 permission="api-vendor-admin")
    def view_delete(self):
        request = self.req
        # form = get_form(request, EditSchema, (btn_cancel, btn_delete))
        form = Form(colander.Schema(), buttons=(btn_cancel,btn_delete))
        for f in form:
            form[f].widget.readonly = True
        query = query_id(request)
        row = query.first()
        if not row:
            return id_not_found(request)

        if request.POST:
            if 'delete' in request.POST:
                request.session.flash('Data %d berhasil dihapus' % row.id)
                query.delete()

            return route_list(request)

        values = row.to_dict()
        form.render(values)
        return dict(form=form, params={"scripts": None})