from oilsweb.lib.context import Context, SubContext, ContextItem
-import oilsweb.lib.acq.picklist
# ----------------------------------------------------------------
# Define the CGI params for this application
from oilsweb.lib.base import *
import pylons
from oilsweb.lib.request import RequestMgr
-import oilsweb.lib.acq.fund, oilsweb.lib.user
+import oilsweb.lib.user
import osrf.net_obj
import oils.const
from osrf.ses import ClientSession
class FundController(BaseController):
- def _retrieve_fund(self, r, ses, fund_id):
- ''' Retrieves a fund object with summary and fleshse the org field '''
- fund = ses.request('open-ils.acq.fund.retrieve',
- r.ctx.core.authtoken.value, fund_id, {"flesh_summary":1}).recv().content()
- Event.parse_and_raise(fund)
- fund.org(OrgUtil.get_org_unit(fund.org())) # flesh the org
- return fund
-
-
def view(self, **kwargs):
r = RequestMgr()
r.ctx.acq.fund_id = kwargs['id']
def list(self):
return RequestMgr().render('acq/financial/list_funds.html')
- def create(self):
- r = RequestMgr()
- ses = ClientSession(oils.const.OILS_APP_ACQ)
-
- if r.ctx.acq.fund_name.value: # create then display the fund
-
- fund = osrf.net_obj.NetworkObject.acqf()
- fund.name(r.ctx.acq.fund_name.value)
- fund.org(r.ctx.acq.fund_org.value)
- fund.year(r.ctx.acq.fund_year.value)
- fund.currency_type(r.ctx.acq.fund_currency_type.value)
-
- fund_id = ses.request('open-ils.acq.fund.create',
- r.ctx.core.authtoken.value, fund).recv().content()
- Event.parse_and_raise(fund_id)
-
- return redirect_to(controller='acq/fund', action='view', id=fund_id)
-
- usermgr = oilsweb.lib.user.User(r.ctx.core)
- tree = usermgr.highest_work_perm_tree('ADMIN_FUND')
-
- types = ses.request(
- 'open-ils.acq.currency_type.all.retrieve',
- r.ctx.core.authtoken.value).recv().content()
- r.ctx.acq.currency_types.value = Event.parse_and_raise(types)
-
-
- if tree is None:
- return _("Insufficient Permissions") # XXX Return a perm failure template
-
- return r.render('acq/financial/create_fund.html')
-
- def allocate(self):
- r = RequestMgr()
- ses = ClientSession(oils.const.OILS_APP_ACQ)
-
- if r.ctx.acq.fund_allocation_source.value:
- return self._allocate(r, ses)
-
- fund = self._retrieve_fund(r, ses, r.ctx.acq.fund_id.value)
-
- source_list = ses.request(
- 'open-ils.acq.funding_source.org.retrieve.atomic',
- r.ctx.core.authtoken.value, None, {'limit_perm':'MANAGE_FUNDING_SOURCE', 'flesh_summary':1}).recv().content()
- Event.parse_and_raise(source_list)
-
- r.ctx.acq.fund.value = fund
- r.ctx.acq.funding_source_list.value = source_list
- return r.render('acq/financial/create_fund_allocation.html')
-
- def _allocate(self, r, ses):
- ''' Create a new fund_allocation '''
-
- alloc = osrf.net_obj.NetworkObject.acqfa()
- alloc.funding_source(r.ctx.acq.fund_allocation_source.value)
- alloc.fund(r.ctx.acq.fund_allocation_fund.value)
-
- if r.ctx.acq.fund_allocation_amount.value:
- alloc.amount(r.ctx.acq.fund_allocation_amount.value)
- else:
- alloc.percent(r.ctx.acq.fund_allocation_percent.value)
- alloc.note(r.ctx.acq.fund_allocation_note.value)
-
- alloc_id = ses.request(
- 'open-ils.acq.fund_allocation.create', r.ctx.core.authtoken.value, alloc).recv().content()
- Event.parse_and_raise(alloc_id)
-
- return redirect_to(controller='acq/fund', action='view', id=r.ctx.acq.fund_allocation_fund.value)
-
-
from oilsweb.lib.base import *
import pylons
from oilsweb.lib.request import RequestMgr
-import oilsweb.lib.acq.fund
import osrf.net_obj
import oils.const
from osrf.ses import ClientSession
from oils.event import Event
from oils.org import OrgUtil
-
class FundingSourceController(BaseController):
def view(self, **kwargs):
def list(self):
return RequestMgr().render('acq/financial/list_funding_sources.html')
- def create(self):
- r = RequestMgr()
- fund_mgr = oilsweb.lib.acq.fund.FundMgr(r)
-
- if r.ctx.acq.funding_source_name.value:
- source = osrf.net_obj.NetworkObject.acqfs()
- source.name(r.ctx.acq.funding_source_name.value)
- source.owner(r.ctx.acq.funding_source_owner.value)
- source.currency_type(r.ctx.acq.funding_source_currency_type.value)
- source_id = fund_mgr.create_funding_source(source)
- return redirect_to(controller='acq/funding_source', action='view', id=source_id)
-
- perm_orgs = ClientSession.atomic_request(
- 'open-ils.actor',
- 'open-ils.actor.user.work_perm.highest_org_set',
- r.ctx.core.authtoken.value, 'CREATE_FUNDING_SOURCE');
-
- if len(perm_orgs) == 0:
- return _("Insufficient Permissions") # XXX Return a perm failure template
-
- r.ctx.core.perm_tree.value['CREATE_FUNDING_SOURCE'] = OrgUtil.get_union_tree(perm_orgs)
- r.ctx.core.high_perm_orgs.value['CREATE_FUNDING_SOURCE'] = perm_orgs
- r.ctx.acq.currency_types.value = fund_mgr.fetch_currency_types()
- return r.render('acq/financial/create_funding_source.html')
-
-
- def create_credit(self):
- r = RequestMgr()
- ses = ClientSession(oils.const.OILS_APP_ACQ)
-
- if r.ctx.acq.funding_source_credit_amount.value:
-
- credit = osrf.net_obj.NetworkObject.acqfscred()
- credit.funding_source(r.ctx.acq.funding_source_id.value)
- credit.amount(r.ctx.acq.funding_source_credit_amount.value)
- credit.note(r.ctx.acq.funding_source_credit_note.value)
-
- status = ses.request(
- 'open-ils.acq.funding_source_credit.create',
- r.ctx.core.authtoken.value, credit).recv().content()
- status = Event.parse_and_raise(status)
- return redirect_to(controller='acq/funding_source', action='view', id=r.ctx.acq.funding_source_id.value)
-
- source = ses.request('open-ils.acq.funding_source.retrieve',
- r.ctx.core.authtoken.value, r.ctx.acq.funding_source_id.value, {"flesh_summary":1}).recv().content()
- r.ctx.acq.funding_source.value = Event.parse_and_raise(source)
- source.owner(OrgUtil.get_org_unit(source.owner()))
- return r.render('acq/financial/create_funding_source_credit.html')
-
-
+
from osrf.ses import ClientSession
from oils.event import Event
from oils.org import OrgUtil
-
from oilsweb.lib.request import RequestMgr
-from oilsweb.lib.acq.fund import FundMgr
-from oilsweb.lib.acq.picklist import PicklistMgr
-from oilsweb.lib.acq import provider_mgr
class PicklistController(BaseController):
r.ctx.acq.picklist.value = kwargs['id']
return r.render('acq/picklist/view.html')
- def create(self, **kwargs):
- r = RequestMgr()
- if r.ctx.acq.picklist_name.value:
- picklist = osrf.net_obj.NetworkObject.acqpl()
- picklist.name(r.ctx.acq.picklist_name.value)
- picklist.owner(r.ctx.core.user.value.id())
- picklist_id = ClientSession.atomic_request(
- oils.const.OILS_APP_ACQ,
- 'open-ils.acq.picklist.create', r.ctx.core.authtoken.value, picklist)
- Event.parse_and_raise(picklist_id)
- return redirect_to(controller='acq/picklist', action='view', id=picklist_id)
- return r.render('acq/picklist/create.html')
-
- def view_lineitem(self, **kwargs):
- r = RequestMgr()
- pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r)
- fmgr = FundMgr(r)
- lineitem = pl_manager.retrieve_lineitem(kwargs.get('id'),
- flesh_attrs=1,
- flesh_provider=1,
- flesh_li_details=1)
- pl_manager.id = lineitem.picklist()
- picklist = pl_manager.retrieve()
- r.ctx.acq.picklist.value = pl_manager.picklist
- r.ctx.acq.lineitem.value = lineitem
- r.ctx.acq.lineitem_marc_html.value = oilsweb.lib.bib.marc_to_html(lineitem.marc())
-
- r.ctx.acq.provider_list.value = provider_mgr.list(r)
- r.ctx.acq.fund_list.value = fmgr.retrieve_org_funds()
-
- return r.render('acq/picklist/view_lineitem.html')
-
-
- def json(self, **kwargs):
- r = RequestMgr()
- pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r, picklist_id=kwargs['id'])
- pl_manager.retrieve()
- pl_manager.retrieve_lineitems(flesh_provider=True,
- sort_attr="author",
- sort_dir="asc")
-
- items = []
- for title in pl_manager.picklist.entries():
- label = ''.join(PicklistMgr.find_lineitem_attr(title, x) for x in ("title", "publisher", "pubdate", "pagination", "isbn", "price"))
- item = {
- 'id': title.id(),
- 'copies': title.item_count(),
- 'title': PicklistMgr.find_lineitem_attr(title, "title"),
- 'isbn': PicklistMgr.find_lineitem_attr(title, "isbn"),
- 'price': PicklistMgr.find_lineitem_attr(title, "price"),
- 'provider': PicklistMgr.find_lineitem_attr(title, "provider"),
- 'label': label
- }
- items.append(item)
-
- pylons.response.headers["Content-type"] = "text/x-json"
- return simplejson.dumps({'identifier': 'id',
- 'label': 'label',
- 'items': items
- })
-
def list(self):
r = RequestMgr()
return r.render('acq/picklist/view_list.html')
r = RequestMgr()
return r.render('acq/picklist/bib_search.html')
- def delete(self, **kwargs):
- r = RequestMgr()
- pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r, picklist_id=kwargs['id'])
- pl_manager.delete()
- return redirect_to(controller='acq/picklist', action='list')
-
-
- def delete_lineitem(self, **kwargs):
- r = RequestMgr()
- pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r)
- lineitem_id = kwargs['id']
- lineitem = pl_manager.retrieve_lineitem(lineitem_id)
- pl_manager.delete_lineitem(lineitem_id)
- return redirect_to(controller='acq/picklist', action='view', id=lineitem.picklist())
-
- def update(self):
- r = RequestMgr()
- ses = ClientSession(oils.const.OILS_APP_ACQ)
- ses.connect()
- page = None
-
- if r.ctx.acq.lineitem_id:
- page = self._update_lineitem_count(r, ses)
- elif r.ctx.acq.picklist_action.value == 'move_selected':
- page = self._move_selected(r, ses)
-
- if not page:
- page = redirect_to(controller='acq/picklist', action='list')
-
- ses.disconnect()
- return page
-
- def update_lineitem(self):
- r = RequestMgr()
- ses = ClientSession(oils.const.OILS_APP_ACQ)
- ses.connect()
-
- if r.ctx.acq.lineitem_detail_id.value:
- # update fund assignment, etc
- detail = ses.request('open-ils.acq.lineitem_detail.retrieve',
- r.ctx.core.authtoken.value,
- r.ctx.acq.lineitem_detail_id.value).recv().content()
- detail = Event.parse_and_raise(detail)
-
- # Update all the fields that are editable via the form
- detail.fund(r.ctx.acq.fund_id.value)
-
- detail = ses.request('open-ils.acq.lineitem_detail.update',
- r.ctx.core.authtoken.value,
- detail).recv().content()
- Event.parse_and_raise(detail)
- elif r.ctx.acq.provider_id.value:
- lineitem = ses.request('open-ils.acq.lineitem.retrieve',
- r.ctx.core.authtoken.value,
- r.ctx.acq.lineitem_id.value).recv().content()
- lineitem = Event.parse_and_raise(lineitem)
-
- lineitem.provider(r.ctx.acq.provider_id.value)
- lineitem = ses.request('open-ils.acq.lineitem.update',
- r.ctx.core.authtoken.value,
- lineitem).recv().content()
- Event.parse_and_raise(lineitem)
-
- return redirect_to(controller='acq/picklist', action='view_lineitem',
- id=r.ctx.acq.lineitem_id.value)
-
- def approve_lineitem(self):
- r = RequestMgr()
- ses = ClientSession(oils.const.OILS_APP_ACQ)
- ses.connect
-
- li = ses.request('open-ils.acq.lineitem.retrieve',
- r.ctx.core.authtoken.value,
- r.ctx.acq.lineitem_id.value).Recv().content()
- li = Event.parse_and_raise(li)
-
- li.state("approved")
-
- li = ses.request('open-ils.acq.lineitem.update',
- r.ctx.core.authtoken.value,
- li).recv().content()
- li = Event.parse_and_raise(li)
-
- return redirect_to(controller='acq/picklist', action='view',
- id=r.ctx.acq.picklist_id.value)
-
- def _update_lineitem_count(self, r, ses):
- ''' Updates # of copies to order for single lineitem '''
-
- picklist_id = r.ctx.acq.picklist_source_id.value
- lineitem_id = r.ctx.acq.lineitem_id.value
- new_count = int(r.ctx.acq.lineitem_item_count.value)
-
- lineitem = ses.request('open-ils.acq.lineitem.retrieve',
- r.ctx.core.authtoken.value,
- lineitem_id, {'flesh_li_details':1}).recv().content()
- lineitem = Event.parse_and_raise(lineitem)
-
- # Make sure the lineitem count is correct.
- lineitem.item_count(len(lineitem.lineitem_details()))
-
- # Can't remove detail records yet
- assert (lineitem.item_count() <= new_count), "Can't delete detail records"
-
- for i in range(new_count - lineitem.item_count()):
- detail = osrf.net_obj.NetworkObject.acqlid()
- detail.lineitem(lineitem.id())
- detail = ses.request('open-ils.acq.lineitem_detail.create',
- r.ctx.core.authtoken.value,
- detail, dict())
- Event.parse_and_raise(detail)
-
- if (lineitem.item_count() != new_count):
- # Update the number of detail records
- lineitem.item_count(new_count)
-
- lineitem = ses.request('open-ils.acq.lineitem.update',
- r.ctx.core.authtoken.value, lineitem)
- Event.parse_and_raise(lineitem)
-
- # fail()
- return redirect_to(controller='acq/picklist', action='view',
- id=picklist_id)
-
- def _move_selected(self, r, ses):
- ''' Moves the selected picklist lineitem's to the destination picklist '''
- for lineitem_id in r.ctx.acq.lineitem_id_list.value:
-
- lineitem = ses.request(
- 'open-ils.acq.lineitem.retrieve',
- r.ctx.core.authtoken.value, lineitem_id).recv().content()
- lineitem = Event.parse_and_raise(lineitem)
-
- lineitem.picklist(r.ctx.acq.picklist_dest_id.value)
-
- status = ses.request(
- 'open-ils.acq.lineitem.update',
- r.ctx.core.authtoken.value, lineitem).recv().content()
- Event.parse_and_raise(status)
-
- return redirect_to(controller='acq/picklist', action='view',
- id=r.ctx.acq.picklist_dest_id.value)
-
from oilsweb.lib.base import *
from oilsweb.lib.request import RequestMgr
-from oilsweb.lib.acq import provider_mgr
import oilsweb.lib.user
import osrf.net_obj
import oils.const
from oils.event import Event
from oils.org import OrgUtil
import mx.DateTime.ISO
-import oilsweb.lib.acq.po_manager
-from oilsweb.lib.acq.picklist import PicklistMgr
-from oilsweb.lib.acq.fund import FundMgr
class PoController(BaseController):
- # Render list of Purchase Orders
- def list(self, **kwargs):
- r = RequestMgr()
- po_mgr = oilsweb.lib.acq.po_manager.PO_Manager(r)
- po_list = po_mgr.retrieve_po_list()
- provider_map = dict()
- for po in po_list:
- if not (po.provider() in provider_map):
- provider_map[po.provider()] = provider_mgr.retrieve(r, po.provider()).name()
- po.provider(provider_map[po.provider()])
- r.ctx.acq.po_list.value = 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()
r = RequestMgr()
return r.render('acq/po/li_search.html')
- # Create PO from contents of picklist
- def create(self, **kwargs):
- r = RequestMgr()
- if not r.ctx.acq.picklist_source_id.value:
- plmgr = PicklistMgr(r,
- picklist_id=r.ctx.acq.picklist_source_id.value)
- r.ctx.acq.picklist_list.value = plmgr.retrieve_list(r)
-
- r.ctx.acq.fund_list.value = FundMgr(r).retrieve_org_funds()
- provider_list = provider_mgr.list(r)
- for p in provider_list:
- p.owner(OrgUtil.get_org_unit(p.owner()))
- r.ctx.acq.provider_list.value = provider_list
- return r.render('acq/po/create.html')
-
- po = osrf.net_obj.NetworkObject.acqpo()
- po.owner(r.ctx.core.user.value.id())
- po.provider(r.ctx.acq.provider_id.value)
- po.default_fund(r.ctx.acq.fund_id.value)
-
- po_id = ClientSession.atomic_request(oils.const.OILS_APP_ACQ,
- 'open-ils.acq.purchase_order.create',
- r.ctx.core.authtoken.value, po)
- Event.parse_and_raise(po_id)
-
- plmgr = oilsweb.lib.acq.picklist.PicklistMgr(r, picklist_id=r.ctx.acq.picklist_source_id.value)
-
- plmgr.retrieve()
- plmgr.retrieve_lineitems(idlist=1)
-
- for pl_item in plmgr.picklist.entries():
- po_lineitem = osrf.net_obj.NetworkObject.acqpoli()
- po_lineitem.purchase_order(po_id)
- po_lineitem_id = ClientSession.atomic_request(oils.const.OILS_APP_ACQ,
- 'open-ils.acq.po_lineitem.create',
- r.ctx.core.authtoken.value,
- po_lineitem,
- { 'picklist_entry': pl_item})
- Event.parse_and_raise(po_lineitem_id)
-
- return redirect_to(controller='acq/po', action='view', id=po_id)
-
- # 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()
- r.ctx.acq.po_li.value = po_mgr.li
-
- summary = dict()
- for det in po_mgr.li.lineitem_details():
- fund = det.fund().name()
- try:
- summary[fund] += 1
- except LookupError:
- summary[fund] = 1
- r.ctx.acq.po_li_sum.value = summary
-
- po_mgr.id = po_mgr.li.purchase_order()
- po_mgr.retrieve(flesh_lineitems=0)
- r.ctx.acq.po.value = po_mgr.po
-
- return r.render('acq/po/view_lineitem.html')
-
- def delete(self, **kwargs):
- r = RequestMgr()
- ClientSession.atomic_request(oils.const.OILS_APP_ACQ,
- 'open-ils.acq.purchase_order.delete',
- r.ctx.core.authtoken.value, kwargs['id'])
- return r.render('acq/po/list')
-
def search(self):
r = RequestMgr()
return r.render('acq/po/search.html')
return redirect_to(controller='acq/po', action='view', id=po_id)
return r.render('acq/po/marc_upload.html')
-
-
from oilsweb.lib.base import *
from oilsweb.lib.request import RequestMgr
-from oilsweb.lib.acq import provider_mgr
from osrf.ses import ClientSession
from osrf.net_obj import NetworkObject
from oils.event import Event
from oilsweb.lib.user import User
import oils.const
-
class ProviderController(BaseController):
def view(self, **kwargs):
r.ctx.acq.provider_id = kwargs['id']
return r.render('acq/financial/view_provider.html')
- def create(self):
- r = RequestMgr()
- ses = ClientSession(oils.const.OILS_APP_ACQ)
-
- if r.ctx.acq.provider_name.value: # create then display the provider
-
- provider = NetworkObject.acqpro()
- provider.name(r.ctx.acq.provider_name.value)
- provider.owner(r.ctx.acq.provider_owner.value)
- provider.currency_type(r.ctx.acq.provider_currency_type.value)
-
- provider_id = ses.request('open-ils.acq.provider.create',
- r.ctx.core.authtoken.value, provider).recv().content()
- Event.parse_and_raise(provider_id)
-
- return redirect_to(controller='acq/provider', action='view', id=provider_id)
-
- usermgr = User(r.ctx.core)
- tree = usermgr.highest_work_perm_tree('ADMIN_PROVIDER')
-
- types = ses.request(
- 'open-ils.acq.currency_type.all.retrieve',
- r.ctx.core.authtoken.value).recv().content()
- r.ctx.acq.currency_types.value = Event.parse_and_raise(types)
-
-
- if tree is None:
- return _("Insufficient Permissions") # XXX Return a perm failure template
-
- return r.render('acq/financial/create_provider.html')
-
- ''' Pure Python version
- def list(self):
- r = RequestMgr()
- providers = provider_mgr.list(r)
- for f in providers:
- f.owner(OrgUtil.get_org_unit(f.owner()))
- r.ctx.acq.provider_list.value = providers
- return r.render('acq/financial/list_providers.html')
- '''
-
-
def list(self):
return RequestMgr().render('acq/financial/list_providers.html')
+++ /dev/null
-import logging
-
-from oilsweb.lib.base import *
-import pylons, os
-import oilsweb.lib.context
-import oilsweb.lib.util
-import oilsweb.lib.acq.search
-from oilsweb.lib.context import Context, SubContext, ContextItem
-
-import oils.utils.csedit
-import osrf.log
-import osrf.system
-from oils.utils.idl import IDLParser
-from oils.utils.csedit import oilsLoadCSEditor
-
-def oilsConnect(config, configContext):
- """Connects to the opensrf network, parses the IDL file, and loads the CSEditor"""
- osrf.system.connect(config, configContext)
- IDLParser.parse()
- oilsLoadCSEditor()
-
-log = logging.getLogger(__name__)
-
-class AcqAdminController(BaseController):
-
- def index(self):
- """
- List the acquisition objects that we're allowed to administer
- """
-
- import pprint
-
- # Parse IDL and render as links for viewing the objects, perhaps?
- c.oils = oilsweb.lib.context.Context.init(request, response)
- c.request = request
- oilsConnect('/openils/conf/opensrf_core.xml', 'config.opensrf')
- c.idl = oils.utils.idl.IDLParser.get_parser()
- c.csedit = oils.utils.csedit.CSEditor()
- c.registry = osrf.net_obj.OBJECT_REGISTRY
- return render('oils/%s/acq/admin.html' % c.oils.core.skin)
-
+++ /dev/null
-from oilsweb.lib.request import RequestMgr
-from oilsweb.lib.base import *
-import oilsweb.lib.util
-from oilsweb.lib.context import Context, SubContext, ContextItem
-import oils.utils.idl
-import oils.utils.csedit
-import osrf.ses
-
-class AdminContext(SubContext):
- ''' Define the CGI/Context params for this application '''
- def __init__(self):
- self.object = ContextItem()
- self.object_class = ContextItem()
- self.object_meta = ContextItem()
- self.mode = ContextItem(default_value='view')
- self.prefix = ContextItem()
- def postinit(self):
- self.prefix.value = "%s/admin" % Context.get_context().core.prefix.value
-
-Context.apply_sub_context('adm', AdminContext)
-
-class AdminController(BaseController):
-
- def init(self, obj_type, obj_id=None):
- r = RequestMgr()
- r.ctx.adm.object_class.value = obj_type
- meta = r.ctx.adm.object_meta.value = oils.utils.idl.IDLParser.get_class(obj_type)
-
- if obj_id is not None:
- r.ctx.adm.object.value = osrf.ses.ClientSession.atomic_request(
- 'open-ils.cstore',
- 'open-ils.cstore.direct.%s.retrieve' %
- meta.fieldmapper.replace('::', '.'), obj_id)
- return r
-
- def index(self):
- r = RequestMgr()
- return r.render('admin/index.html')
-
- def view(self, **kwargs):
- r = self.init(kwargs['type'], kwargs['id'])
- r.ctx.adm.mode.value = 'view'
- return r.render('admin/object.html')
-
- def update(self, **kwargs):
- r = self.init(kwargs['type'], kwargs['id'])
- r.ctx.adm.mode.value = 'update'
- return r.render('admin/object.html')
-
- def create(self, **kwargs):
- r = self.init(kwargs['type'])
- r.ctx.adm.mode.value = 'create'
- return r.render('admin/object.html')
-
- def delete(self, **kwargs):
- r = self.init(kwargs['type'], kwargs['id'])
- r.ctx.adm.mode.value = 'delete'
- return r.render('admin/object.html')
-
-
+++ /dev/null
-import osrf.ses, osrf.net_obj
-import oils.const, oils.utils.utils, oils.event, oils.org
-
-class FundMgr(object):
- ''' Fund utility class '''
- def __init__(self, request_mgr, **kwargs):
- self.request_mgr = request_mgr
- self.ses = osrf.ses.ClientSession(oils.const.OILS_APP_ACQ)
-
- def fetch_currency_types(self):
- types = self.ses.request(
- 'open-ils.acq.currency_type.all.retrieve',
- self.request_mgr.ctx.core.authtoken.value).recv().content()
- oils.event.Event.parse_and_raise(types)
- return types
-
- def retrieve(self, fund_id):
- fund = self.ses.request(
- 'open-ils.acq.fund.retrieve',
- self.request_mgr.ctx.core.authtoken.value, fund_id).recv().content()
- oils.event.Event.parse_and_raise(fund)
- return fund
-
- def retrieve_org_funds(self, limit_perm=None):
- funds = self.ses.request(
- 'open-ils.acq.fund.org.retrieve.atomic',
- self.request_mgr.ctx.core.authtoken.value, None, limit_perm).recv().content()
- oils.event.Event.parse_and_raise(funds)
- return funds
-
- def create_fund(self, fund):
- fund_id = self.ses.request(
- 'open-ils.acq.fund.create',
- self.request_mgr.ctx.core.authtoken.value, fund).recv().content()
- oils.event.Event.parse_and_raise(fund_id)
- return fund_id
-
-
- def retrieve_funding_source(self, source_id):
- source = self.ses.request(
- 'open-ils.acq.funding_source.retrieve',
- self.request_mgr.ctx.core.authtoken.value, source_id).recv().content()
- oils.event.Event.parse_and_raise(source)
- return source
-
- def retrieve_org_funding_sources(self, options=None):
- sources = self.ses.request(
- 'open-ils.acq.funding_source.org.retrieve.atomic',
- self.request_mgr.ctx.core.authtoken.value, None, options).recv().content()
- oils.event.Event.parse_and_raise(sources)
- return sources
-
-
- def create_funding_source(self, source):
- source_id = self.ses.request(
- 'open-ils.acq.funding_source.create',
- self.request_mgr.ctx.core.authtoken.value, source).recv().content()
- oils.event.Event.parse_and_raise(source_id)
- return source_id
-
- def create_allocation(self, alloc):
- alloc_id = self.ses.request(
- 'open-ils.acq.fund_allocation.create',
- self.request_mgr.ctx.core.authtoken.value, alloc).recv().content()
- oils.event.Event.parse_and_raise(alloc_id)
- return alloc_id
-
+++ /dev/null
-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 PicklistMgr(object):
- def __init__(self, request_mgr, **kwargs):
- self.request_mgr = request_mgr
- self.id = kwargs.get('picklist_id')
- self.picklist = kwargs.get('picklist')
- self.ses = osrf.ses.ClientSession(oils.const.OILS_APP_ACQ)
-
- def retrieve(self):
- picklist = self.ses.request(
- 'open-ils.acq.picklist.retrieve',
- self.request_mgr.ctx.core.authtoken.value, self.id, {'flesh_lineitem_count':1, 'flesh_username':1}).recv().content()
-
- oils.event.Event.parse_and_raise(picklist)
- self.picklist = picklist
-
- usermgr = oilsweb.lib.user.User(self.request_mgr.ctx.core)
-
- picklist.create_time(
- mx.DateTime.ISO.ParseAny(
- picklist.create_time()).strftime(usermgr.get_date_format()))
-
- picklist.edit_time(
- mx.DateTime.ISO.ParseAny(
- picklist.edit_time()).strftime(usermgr.get_date_format()))
-
-
- def delete(self, picklist_id=None):
- picklist_id = picklist_id or self.id
- status = self.ses.request(
- 'open-ils.acq.picklist.delete',
- self.request_mgr.ctx.core.authtoken.value, picklist_id).recv().content()
- oils.event.Event.parse_and_raise(status)
- return status
-
- def delete_lineitem(self, lineitem_id):
- status = self.ses.request(
- 'open-ils.acq.lineitem.delete',
- self.request_mgr.ctx.core.authtoken.value, lineitem_id).recv().content()
- oils.event.Event.parse_and_raise(status)
- return status
-
-
- def retrieve_lineitems(self, **kwargs):
- # grab the lineitems
- lineitems = self.ses.request(
- 'open-ils.acq.lineitem.picklist.retrieve.atomic',
- self.request_mgr.ctx.core.authtoken.value,
- self.picklist.id(),
- {
- "offset" : kwargs.get('offset'),
- "limit" : kwargs.get('limit'),
- "idlist" : kwargs.get('idlist'),
- "flesh_attrs" : 1,
- "clear_marc" : 1,
- "sort_attr" : kwargs.get('sort_attr'),
- "sort_dir": kwargs.get('sort_dir')
- }
- ).recv().content()
-
- if kwargs.get('flesh_provider'):
- for lineitem in lineitems:
- if lineitem.provider():
- provider = self.ses.request(
- 'open-ils.acq.provider.retrieve',
- self.request_mgr.ctx.core.authtoken.value,
- lineitem.provider()).recv().content()
- lineitem.provider(provider)
-
- self.picklist.entries(lineitems)
-
- def retrieve_list(self, all=False):
- ''' Returns my list of picklist objects '''
- if (all):
- request = 'open-ils.acq.picklist.user.all.retrieve.atomic'
- else:
- request = 'open-ils.acq.picklist.user.retrieve'
-
- list = self.ses.request(request,
- self.request_mgr.ctx.core.authtoken.value,
- {'flesh_lineitem_count':1, 'flesh_username':1}).recv().content()
- oils.event.Event.parse_and_raise(list)
-
- usermgr = oilsweb.lib.user.User(self.request_mgr.ctx.core)
-
- for picklist in list:
- picklist.create_time(
- mx.DateTime.ISO.ParseAny(
- picklist.create_time()).strftime(usermgr.get_date_format()))
-
- picklist.edit_time(
- mx.DateTime.ISO.ParseAny(
- picklist.edit_time()).strftime(usermgr.get_date_format()))
-
- return list
-
-
- def retrieve_lineitem(self, lineitem_id, **kwargs):
- args = {'flesh_attrs' : kwargs.get('flesh_attrs'),
- 'flesh_li_details' : kwargs.get('flesh_li_details')}
- lineitem = self.ses.request(
- 'open-ils.acq.lineitem.retrieve',
- self.request_mgr.ctx.core.authtoken.value, lineitem_id, args).recv().content()
- oils.event.Event.parse_and_raise(lineitem)
- if kwargs.get('flesh_provider'):
- if lineitem.provider():
- provider = self.ses.request(
- 'open-ils.acq.provider.retrieve',
- self.request_mgr.ctx.core.authtoken.value,
- lineitem.provider()).recv().content()
- lineitem.provider(provider)
-
- return lineitem
-
- def create_or_replace(self, pl_name):
-
- # find and delete any existing picklist with the requested name
- data = self.ses.request(
- 'open-ils.acq.picklist.name.retrieve',
- self.request_mgr.ctx.core.authtoken.value, pl_name).recv()
- if data:
- self.delete(data.content().id())
-
- # create the new one
- picklist = osrf.net_obj.NetworkObject.acqpl()
- picklist.name(pl_name)
- picklist.owner(self.request_mgr.ctx.core.user.value.id())
-
- picklist = self.ses.request(
- 'open-ils.acq.picklist.create',
- self.request_mgr.ctx.core.authtoken.value, picklist).recv().content()
- oils.event.Event.parse_and_raise(picklist)
-
- return picklist
-
- def create_lineitem(self, lineitem):
- status = self.ses.request(
- 'open-ils.acq.lineitem.create',
- self.request_mgr.ctx.core.authtoken.value, lineitem).recv().content()
- oils.event.Event.parse_and_raise(status)
- return status
-
- @staticmethod
- def find_lineitem_attr(lineitem, attr_name, attr_type='lineitem_marc_attr_definition'):
- for lineitem_attr in lineitem.attributes():
- if lineitem_attr.attr_type() == attr_type and lineitem_attr.attr_name() == attr_name:
- return lineitem_attr.attr_value()
- return ''
-
-
+++ /dev/null
-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, **kwargs):
- if 'flesh_lineitems' in kwargs:
- flesh = kwargs['flesh_lineitems']
- else:
- flesh = 1
-
- po = self.ses.request('open-ils.acq.purchase_order.retrieve',
- self.request_mgr.ctx.core.authtoken.value,
- self.id,
- {'flesh_lineitems':flesh}).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, **kwargs):
- li = self.ses.request('open-ils.acq.po_lineitem.retrieve',
- self.request_mgr.ctx.core.authtoken.value,
- self.liid, {'flesh_li_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'):
- if not li.attributes():
- return ''
- 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 ''
+++ /dev/null
-import oils.const
-from oils.event import Event
-from osrf.ses import ClientSession
-
-def retrieve(r, id):
- ses = ClientSession(oils.const.OILS_APP_ACQ)
- provider = ses.request('open-ils.acq.provider.retrieve',
- r.ctx.core.authtoken.value, id).recv().content()
- Event.parse_and_raise(provider)
- return provider
-
-def list(r):
- ses = ClientSession(oils.const.OILS_APP_ACQ)
- providers = ses.request('open-ils.acq.provider.org.retrieve.atomic',
- r.ctx.core.authtoken.value, None,
- {"flesh_summary":1}).recv().content()
- Event.parse_and_raise(providers)
- return providers
+++ /dev/null
-# -*- coding: utf-8 -*-
-<%inherit file='../base.html'/>
-<%def name="page_title()">${_('Evergreen Acquisitions Administration ')}</%def>
-<%def name="block_content()">
-<h1>${_('Evergreen Acquisitions Administration ')}</h1>
-<pre>
-
- Check for a session key in GET dictionary object:
- % if c.request.GET.has_key('ses'):
- SESSION = ${c.request.GET['ses']}
- % else:
- NO SESSION
- % endif
-
- Try some sample method calls - no session appears to be required,
- possibly because I'm performing the connect in acq_admin.py
- <%
- csd = c.csedit.retrieve_acq_exchange_rate(1)
- eur = c.csedit.retrieve_acq_exchange_rate(2)
- %>
- csd = c.csedit.retrieve_acq_exchange_rate(1)
- csd.to_currency()
- Result = ${csd.to_currency()}
-
- eur = c.csedit.retrieve_acq_exchange_rate(2)
- eur.to_currency()
- Result = ${eur.to_currency()}
-
- Iterate through the acq schema registry objects, dumping interesting info
- that we should be able to wrap into a series of links and forms for
- administrative purposes.
-
- Registry:
- % for key in sorted(c.registry):
- % if c.idl.IDLObject.has_key(key) and str(c.idl.IDLObject[key]['tablename'])[0:4] == 'acq.':
- registry hint: ${key}
- tablename : ${c.idl.IDLObject[key]['tablename']}
- controller : ${c.idl.IDLObject[key]['controller']}
- virtual : ${c.idl.IDLObject[key]['virtual']}
- fieldmapper : ${c.idl.IDLObject[key]['fieldmapper']}
- KEYS
- %for regkey in c.registry[key].keys:
- ${regkey}
- % endfor
-
- % endif
- % endfor
-
- List the callable methods in the CSEditor object, more for interest than anything else:
-
- CSEditor object:
- % for att in [att for att in dir(c.csedit) if callable(getattr(c.csedit, att)) and att[0:2] != '__']:
- ${att}
- % endfor
-
-
-</pre>
-</%def>
+++ /dev/null
-<%inherit file='../base.html'/>
-<%def name="block_sub_navigate()">
- <%include file='navigate.html'/>
-</%def>
-
+++ /dev/null
-<%inherit file='base.html'/>
-
-<%def name="page_title()">${_('Evergreen Admin')}</%def>
-<%def name="block_content()">
- INDEX
-</%def>
-
+++ /dev/null
-<!-- vim:set filetype=mako: -->
-<%inherit file='base.html'/>
-<%namespace name='widget' file='widgets.html'/>
-
-<%def name="page_title()">${_('Evergreen Admin')}</%def>
-<%def name="block_content()">
- <div id='oils-admin-object-lable'>${c.oils.adm.object_meta.value.label}</div>
- % if c.oils.adm.mode.value == 'delete':
- <div>
- <%
- ## Why does doing this inline (inside ${...}) give me a syntax error????
- string = _("Are you sure you want to delete %(cls)s with id %(id)d?") % {"cls":c.oils.adm.object_class.value, "id":c.oils.adm.object.value.id()}
- %>
- ${string}
- </div>
- % else:
- <form action='update_object' method='POST'>
- <table id='oils-admin-object-table'>
- % for fieldmeta in [ f for f in c.oils.adm.object_meta.value.fields if not f.virtual]:
- <tr>
- <td>${fieldmeta.label}</td>
- <td>
- % if c.oils.adm.mode.value == 'update':
- (${fieldmeta.rpt_datatype})
- ${widget.load(fieldmeta.rpt_datatype,fieldmeta.name, getattr(c.oils.adm.object.value, fieldmeta.name)())}
- % else:
- % if c.oils.adm.mode.value == 'create':
- <input type='text' size='36' />
- % else:
- % if c.oils.adm.mode.value == 'view':
- <span>${unicode(getattr(c.oils.adm.object.value, fieldmeta.name)())}</span>
- % endif
- % endif
- % endif
- </td>
- </tr>
- % endfor
- </table>
- </form>
- % endif
-</%def>
-
+++ /dev/null
-<!-- vim:set filetype=mako: -->
-
-<!--
- This file contains all of the automatically generated widgets
--->
-
-
-<%def name='load(type, field, value=None)'>
- % if type == 'text' or type is None:
- <%call expr='widget_text(field, value)'/>
- % endif
- % if type == 'bool':
- <%call expr='widget_bool(field, value)'/>
- % endif
- % if type == 'float':
- <%call expr='widget_float(field, value)'/>
- % endif
- % if type == 'id':
- <%call expr='widget_id(field, value)'/>
- % endif
- % if type == 'int':
- <%call expr='widget_int(field, value)'/>
- % endif
- % if type == 'interval':
- <%call expr='widget_intterval(field, value)'/>
- % endif
- % if type == 'link':
- <%call expr='widget_link(field, value)'/>
- % endif
- % if type == 'money':
- <%call expr='widget_money(field, value)'/>
- % endif
- % if type == 'org_unit':
- <%call expr='widget_org_unit(field, value)'/>
- % endif
- % if type == 'timestamp':
- <%call expr='widget_timestamp(field, value)'/>
- % endif
-</%def>
-
-<!-- BOOL -->
-<%def name='widget_bool(field, value=None)'>
- <select name='${field}'>
- <option value='t'
- % if value == 't':
- selected='selected'
- % endif
- >${_('True')}</option>
- <option value='f'
- % if value != 't':
- selected='selected'
- % endif
- >${_('False')}</option>
- </select>
-</%def>
-
-<!-- TEXT -->
-<%def name='widget_text(field, value=None)'>
- <input type='text' size='48'
- %if value is None:
- value=''/>
- %else:
- value='${unicode(value)}'/>
- %endif
-</%def>
-
-<!-- FLOAT -->
-<%def name='widget_float(field, value=None)'>
- <input type='text' size='18'
- %if value is None:
- value=''/>
- %else:
- value='${unicode(value)}'/>
- %endif
-</%def>
-
-<!-- ID -->
-<%def name='widget_id(field, value=None)'>
- <input type='text' size='18'
- %if value is None:
- value=''/>
- %else:
- value='${unicode(value)}'/>
- %endif
-</%def>
-
-<!-- INT -->
-<%def name='widget_int(field, value=None)'>
- <input type='text' size='18'
- %if value is None:
- value=''/>
- %else:
- value='${unicode(value)}'/>
- %endif
-</%def>
-
-<!-- INTERVAL -->
-<%def name='widget_interval(field, value=None)'>
- <%call expr='widget_text(field, value)'/>
-</%def>
-
-<!-- LINK -->
-<%def name='widget_link(field, value=None)'>
-</%def>
-
-<!-- MONEY -->
-<%def name='widget_money(field, value=None)'>
-</%def>
-
-<!-- ORG_UNIT -->
-<%def name='widget_org_unit(field, value=None)'>
-</%def>
-
-<!-- TIMESTAMP -->
-<%def name='widget_timestamp(field, value=None)'>
-</%def>
-
-
</div>
</div>
+ <!--
<div dojoType="dijit.form.DropDownButton">
<span>${('Serials')}</span>
<div dojoType="dijit.Menu">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCopy" onClick="alert('not yet...');">Test</div>
</div>
</div>
+ -->
<div dojoType="dijit.form.DropDownButton">