From 93975bf0c1f2d6e3ce6e16661b019b204b3222e9 Mon Sep 17 00:00:00 2001 From: djfiander Date: Fri, 22 Feb 2008 15:10:25 +0000 Subject: [PATCH] First pass at Purchase Order support git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@8815 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../oilsweb/oilsweb/controllers/acq/__init__.py | 4 ++ Open-ILS/web/oilsweb/oilsweb/controllers/acq/po.py | 38 +++++++++++++ Open-ILS/web/oilsweb/oilsweb/lib/acq/po_manager.py | 63 ++++++++++++++++++++++ .../public/oils/media/css/skin/default/acq.css | 20 ++++++- .../public/oils/media/css/theme/default/acq.css | 12 +++++ .../templates/oils/default/acq/navigate.html | 8 +++ .../templates/oils/default/acq/po/navigate.html | 4 ++ .../templates/oils/default/acq/po/po_summary.html | 13 +++++ .../oils/default/acq/po/view_lineitem.html | 8 +++ .../templates/oils/default/acq/po/view_po.html | 62 +++++++++++++++++++++ .../oils/default/acq/po/view_po_list.html | 37 +++++++++++++ 11 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 Open-ILS/web/oilsweb/oilsweb/controllers/acq/po.py create mode 100644 Open-ILS/web/oilsweb/oilsweb/lib/acq/po_manager.py create mode 100644 Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/navigate.html create mode 100644 Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/po_summary.html create mode 100644 Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_lineitem.html create mode 100644 Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_po.html create mode 100644 Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_po_list.html diff --git a/Open-ILS/web/oilsweb/oilsweb/controllers/acq/__init__.py b/Open-ILS/web/oilsweb/oilsweb/controllers/acq/__init__.py index 53b593dce4..7273cf8d7d 100644 --- a/Open-ILS/web/oilsweb/oilsweb/controllers/acq/__init__.py +++ b/Open-ILS/web/oilsweb/oilsweb/controllers/acq/__init__.py @@ -70,6 +70,10 @@ class AcqContext(SubContext): self.provider_currency_type = ContextItem(cgi_name='acq.pct') self.provider_owner = ContextItem(cgi_name='acq.po') + self.po = ContextItem() + self.po_list = ContextItem() + self.po_id = ContextItem(cgi_name='acq.poid') + self.po_li_id_list = ContextItem(cgi_name='acq.poliil', multi=True) # ------------------------------------------------------------- # utility functions diff --git a/Open-ILS/web/oilsweb/oilsweb/controllers/acq/po.py b/Open-ILS/web/oilsweb/oilsweb/controllers/acq/po.py new file mode 100644 index 0000000000..b9e28da458 --- /dev/null +++ b/Open-ILS/web/oilsweb/oilsweb/controllers/acq/po.py @@ -0,0 +1,38 @@ +from oilsweb.lib.base import * +from oilsweb.lib.request import RequestMgr +import oilsweb.lib.user +import osrf.net_obj +import oils.const +from osrf.ses import ClientSession +from oils.event import Event +from oils.org import OrgUtil +import mx.DateTime.ISO +import oilsweb.lib.acq.po_manager + +# open-ils.acq.purchase_order.retrieve "2f9697131c80e49fb9f2515781102f6a", +# 8, {"flesh_lineitems":1,"clear_marc":1} + + +class PoController(BaseController): + + # Render list of Purchase Orders + def list(self, **kwargs): + r = RequestMgr() + po_mgr = oilsweb.lib.acq.po_manager.PO_Manager(r) + r.ctx.acq.po_list.value = po_mgr.retrieve_po_list() + return r.render('acq/po/view_po_list.html') + + # Render display of individual PO: list of line items + def view(self, **kwargs): + r = RequestMgr() + po_mgr = oilsweb.lib.acq.po_manager.PO_Manager(r, poid=kwargs['id']) + po_mgr.retrieve() + r.ctx.acq.po.value = po_mgr.po + return r.render('acq/po/view_po.html') + + # Render individual line item: list of detail info + def view_lineitem(self, **kwargs): + r = RequestMgr() + po_mgr = oilsweb.lib.acq.po_manager.PO_Manager(r, liid=kwargs['id']) + po_mgr.retrieve_lineitem() + return r.render('acq.po/view_lineitem.html') diff --git a/Open-ILS/web/oilsweb/oilsweb/lib/acq/po_manager.py b/Open-ILS/web/oilsweb/oilsweb/lib/acq/po_manager.py new file mode 100644 index 0000000000..88ed89ceca --- /dev/null +++ b/Open-ILS/web/oilsweb/oilsweb/lib/acq/po_manager.py @@ -0,0 +1,63 @@ +import osrf.cache, osrf.json, osrf.ses, osrf.net_obj +import oils.const, oils.utils.utils, oils.event +import oilsweb.lib.user +import mx.DateTime.ISO + +class PO_Manager(object): + def __init__(self, request_mgr, **kwargs): + self.request_mgr = request_mgr + self.id = kwargs.get('poid') + self.liid = kwargs.get('liid') + self.ses = osrf.ses.ClientSession(oils.const.OILS_APP_ACQ) + + def retrieve_po_list(self): + ''' Returns list of POs ''' + + request = 'open-ils.acq.purchase_order.user.all.retrieve.atomic' + + list = self.ses.request(request, + self.request_mgr.ctx.core.authtoken.value, + {'flesh_lineitem_count':1, + 'clear_marc':1, + 'order_by':'id'}).recv().content() + oils.event.Event.parse_and_raise(list) + + usermgr = oilsweb.lib.user.User(self.request_mgr.ctx.core) + datefmt = usermgr.get_date_format() + + for po in list: + ctime = mx.DateTime.ISO.ParseAny(po.create_time()) + po.create_time(ctime.strftime(datefmt)) + + etime = mx.DateTime.ISO.ParseAny(po.edit_time()) + po.edit_time(etime.strftime(datefmt)) + + return list + + def retrieve(self): + po = self.ses.request('open-ils.acq.purchase_order.retrieve', + self.request_mgr.ctx.core.authtoken.value, + self.id, {'flesh_lineitems':1}).recv().content() + + oils.event.Event.parse_and_raise(po) + datefmt = oilsweb.lib.user.User(self.request_mgr.ctx.core).get_date_format() + + po.create_time(mx.DateTime.ISO.ParseAny(po.create_time()).strftime(datefmt)) + po.edit_time(mx.DateTime.ISO.ParseAny(po.edit_time()).strftime(datefmt)) + self.po = po + + def retrieve_lineitem(self): + li = self.ses.request('open-ils.acq.po_lineitem.retrieve', + self.request_mgr.ctx.core.authtoken.value, + self.liid, {'flesh_details':1}).recv().content() + datefmt = oilsweb.lib.user.User(self.request_mgr.ctx.core).get_date_format() + li.create_time(mx.DateTime.ISO.ParseAny(li.create_time()).strftime(datefmt)) + li.edit_time(mx.DateTime.ISO.ParseAny(li.edit_time()).strftime(datefmt)) + self.li = li + + @staticmethod + def find_li_attr(li, attr_name, attr_type='picklist_marc_attr_definition'): + for li_attr in li.attributes(): + if li_attr.attr_type() == attr_type and li_attr.attr_name() == attr_name: + return li_attr.attr_value() + return '' diff --git a/Open-ILS/web/oilsweb/oilsweb/public/oils/media/css/skin/default/acq.css b/Open-ILS/web/oilsweb/oilsweb/public/oils/media/css/skin/default/acq.css index f3c7b2258b..a867f56199 100644 --- a/Open-ILS/web/oilsweb/oilsweb/public/oils/media/css/skin/default/acq.css +++ b/Open-ILS/web/oilsweb/oilsweb/public/oils/media/css/skin/default/acq.css @@ -39,7 +39,25 @@ #oils-acq-picklist-paging-block { width: 50%; text-align: left;} #oils-acq-picklist-actions-block { width: 50%; text-align: right;} -#oils-acq-pikclist-header-subtable { width: 100%; } +#oils-acq-picklist-header-subtable { width: 100%; } + +/* list of pos */ +#oils-acq-po-list-table {width: 100%;} +#oils-acq-po-list-table td {padding: 3px;} + +/* a single po */ +#oils-acq-po-table { width: 100%; } +#oils-acq-po-header { padding: 4px; margin-bottom: 20px; } +.oils-acq-po-records-jacket-td { width: 46px; } +.oils-acq-po-records-jacket { width: 42px; height: 54px; padding-left: 0px; } +.oils-acq-po-records-title-row {} +.oils-acq-po-records-author-row td { padding-left: 30px; } +.oils-acq-po-records-phys_desc-row td { padding-left: 30px; } +.oils-acq-po-records-phys_desc-row {} + +#oils-acq-po-paging-block { width: 50%; text-align: left;} +#oils-acq-po-actions-block { width: 50%; text-align: right;} +#oils-acq-po-header-subtable { width: 100%; } #oils-acq-list-header { margin: 10px; width: 98%;} #oils-acq-list-header-label { float: left; } diff --git a/Open-ILS/web/oilsweb/oilsweb/public/oils/media/css/theme/default/acq.css b/Open-ILS/web/oilsweb/oilsweb/public/oils/media/css/theme/default/acq.css index 2428aa0147..aba4c5d77c 100644 --- a/Open-ILS/web/oilsweb/oilsweb/public/oils/media/css/theme/default/acq.css +++ b/Open-ILS/web/oilsweb/oilsweb/public/oils/media/css/theme/default/acq.css @@ -28,6 +28,18 @@ .oils-acq-picklist-entry-delete-link { font-size: 85%; } #oils-acq-pikclist-header-subtable tr { border: none; } +#oils-acq-po-table thead tr { border: 1px solid #A1A1A1; } +#oils-acq-po-header {border: 1px solid #85C777;} +#oils-acq-po-entry-header {border: 1px solid #85C777;} +#oils-acq-po-name { font-weight: bold; font-style: italic; } +.oils-acq-po-attributes { font-size: 90%; margin-left: 15px;} +.oils-acq-po-entry-attributes { font-size: 90%; margin-left: 15px;} +.oils-acq-po-records-phys_desc-row { border-bottom: 1px solid #6BA160; } +.oils-acq-po-po-td { border-style: solid; border-color: #A1A1A1; border-width: 0px 1px 0px 1px; } +.oils-acq-po-records-service-td { font-size: 85%; } +.oils-acq-po-entry-delete-link { font-size: 85%; } +#oils-acq-po-header-subtable tr { border: none; } + #oils-acq-list-header {border-bottom: 1px solid #6BA160;} #oils-acq-list-header-label { font-weight: bold; font-size: 110%; } #oils-acq-list-header-actions { font-weight: bold; } diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/navigate.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/navigate.html index 07c9e4f37c..4ec888f38d 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/navigate.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/navigate.html @@ -18,4 +18,12 @@ <%include file='financial/navigate.html'/> % endif +
+ ${_('POs')} +
+% if c.oils.core.page.value.startswith('acq/po'): +
+ <%include file='po/navigate.html' /> +
+% endif diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/navigate.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/navigate.html new file mode 100644 index 0000000000..f76e1e9949 --- /dev/null +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/navigate.html @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +
+ ${_('Manage')} +
diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/po_summary.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/po_summary.html new file mode 100644 index 0000000000..66ad3b7399 --- /dev/null +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/po_summary.html @@ -0,0 +1,13 @@ +
+ ${_('Purchase Order')} ${c.oils.acq.po.value.id()} +
+ <% + meta = _("Create date %(date)s") % {"date":c.oils.acq.po.value.create_time()} + meta2 = _("Last updated %(date)s") % {"date":c.oils.acq.po.value.edit_time()} + meta3 = _("Provider: %(provider)s") % {"provider":c.oils.acq.po.value.provider()} + %> +
${meta}
+
${meta2}
+
${meta3}
+
+
diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_lineitem.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_lineitem.html new file mode 100644 index 0000000000..6c1fcaccf4 --- /dev/null +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_lineitem.html @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +<%inherit file='../base.html' /> +<%namespace file='../../common/widgets.html' name='widget' /> + +<%def name='page_title()'>${_('Evergreen View Line Item)} +<%def name='block_content()'> +Here's a line item + diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_po.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_po.html new file mode 100644 index 0000000000..2d772f833c --- /dev/null +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_po.html @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +<%inherit file='../base.html' /> +<%namespace file='../../common/widgets.html' name='widget' /> + +<%def name='page_title()'>${_('Evergreen View PO')} +<%def name='block_content()'> +<%include file='po_summary.html' /> + +
+ + + + + + + + <% + import oilsweb.lib.bib + from oilsweb.lib.acq.po_manager import PO_Manager +%> + % for li in c.oils.acq.po.value.lineitems(): + + + + + + + + + + + + + % endfor + +
+ + + + +
+ PUT PAGING HERE + + PUT PO ACTIONS HERE +
+
+ + + ${PO_Manager.find_li_attr(li, "title")} +
${PO_Manager.find_li_attr(li, "author")} +
+ ${PO_Manager.find_li_attr(li, "isbn")} | + ${PO_Manager.find_li_attr(li, "pubdate")} | + ${PO_Manager.find_li_attr(li, "pagination")} + ${_('Delete')} + ${PO_Manager.find_li_attr(li, "price")}
+
+ +
+ diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_po_list.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_po_list.html new file mode 100644 index 0000000000..71b02de32e --- /dev/null +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/view_po_list.html @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +<%inherit file='../base.html'/> +<%def name="page_title()">${_('Evergreen My Purchase Orders')} +<%def name="block_content()"> + +
+
${_('My Purchase Orders')}
+ +
+ + + + + + + + + + + + % for po in c.oils.acq.po_list.value: + + + + + + + + % endfor + +
${_('ID')}${_('Creation Date')}${_('Edit Date')}${_('Number of Entries')} + +
${po.id()}${po.create_time()}${po.edit_time()}${po.lineitem_count()}${_('Delete')}
+ -- 2.11.0