Commit b63d0819 authored by Xiaowu Zhang's avatar Xiaowu Zhang

erp5_travel_expense: add expense sheet

auto-generate expense sheet by using title and number
parent 40eae5e7
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_list</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_list</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>view</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>View</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/ExpenseSheetModule_viewExpenseSheetList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_jio_view</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jio_view</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>jio_view</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>100.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>View</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/ExpenseSheet_viewAsJio</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_view</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_view</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>view</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>View</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/ExpenseSheet_view</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<module>
<id>expense_sheet_module</id>
<permission_list>
<permission type='tuple'>
<name>Access Transient Objects</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Access contents information</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Access session data</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add portal content</name>
<role>Assignor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add portal folders</name>
<role>Assignor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Change local roles</name>
<role>Assignor</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Copy or Move</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Delete objects</name>
<role>Assignor</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>List folder contents</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Modify portal content</name>
<role>Assignor</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>View</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>View History</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
</permission_list>
<portal_type>Expense Sheet Module</portal_type>
<title>Expense Sheets</title>
</module>
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>OfficeJS Add Text Document</title>
<script src="rsvp.js"></script>
<script src="renderjs.js"></script>
<script src="gadget_officejs_page_add_expense_sheet.js"></script>
</head>
<body>
</body>
</html>
/*globals window, RSVP, rJS*/
/*jslint indent: 2, nomen: true, maxlen: 80*/
(function (window, RSVP, rJS) {
"use strict";
var gadget_klass = rJS(window);
gadget_klass
.ready(function (g) {
g.props = {};
return g.getElement()
.push(function (element) {
g.props.element = element;
g.props.deferred = RSVP.defer();
});
})
.declareAcquiredMethod("post", "jio_post")
.declareAcquiredMethod("redirect", "redirect")
.declareAcquiredMethod("updateHeader", "updateHeader")
.declareAcquiredMethod('getSetting', 'getSetting')
.declareMethod("render", function (options) {
var gadget = this;
gadget.props.options = options;
return new RSVP.Queue()
.push(function () {
gadget.props.portal_type = "Expense Sheet";
gadget.props.parent_relative_url = "expense_sheet_module";
return gadget.updateHeader({
title: "New Expense Sheet"
});
})
.push(function () {
gadget.props.deferred.resolve();
});
})
.declareService(function () {
var gadget = this;
return new RSVP.Queue()
.push(function () {
return gadget.props.deferred.promise;
})
.push(function () {
var doc = {
// XXX Hardcoded
parent_relative_url: gadget.props.parent_relative_url,
portal_type: gadget.props.portal_type
};
return gadget.post(doc);
})
.push(function (data) {
return gadget.redirect({
jio_key: data,
page: "view"
});
});
});
}(window, RSVP, rJS));
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Expense Sheet Module View Expense Sheet</title>
<link rel="stylesheet" type="text/css" href="alertify.css" />
<script src="rsvp.js"></script>
<script src="renderjs.js"></script>
<script src="gadget_global.js" ></script>
<script src="handlebars.js"></script>
<script src="alertify.js"></script>
<script src="gadget_officejs_hr_tool.js"></script>
<script class="view-expense-sheet-template" type="text/x-handlebars-template">
<form class="view-expense-sheet-form">
{{#if not_readonly}}
<button type="submit" data-i18n="Save" style="display:none;">Save</button>
<div class="ui-field-contain">
<label data-i18n="Title">Title</label>
<input type="text" class='title' name="title" value="{{title}}">
</div>
<div class="ui-field-contain">
<label data-i18n="Number">Number</label>
<input type="number" class='number' name="number" value="{{number}}">
</div>
<div class="ui-field-contain">
<div class='svg'></div>
</div>
</div>
<div class="ui-field-contain">
<label data-i18n="Sync Method">Sync Method</label>
<div>
<input type="radio" id="sync_flag_yes" {{sync_checked}} name="sync_flag" value=1>
<label for="sync_flag_yes" data-i18n="Ready To Sync">Ready To Sync</label>
<input type="radio" id="sync_flag_no" {{not_sync_checked}} name="sync_flag" value=0 >
<label for="sync_flag_no" data-i18n="Do Not Sync">Do Not Sync</label>
</div>
</div>
{{else}}
<div class="ui-field-contain">
<label data-i18n="Title">Title</label>
<input type="text" class='title' name="title" readonly value="{{title}}">
</div>
<div class="ui-field-contain">
<label data-i18n="Number">Number</label>
<input type="number" class='number' name="number" readonly value="{{number}}">
</div>
<div class="ui-field-contain">
<div class='svg'></div>
</div>
</div>
{{/if}}
</form>
</script>
<script src="gadget_officejs_jio_expense_sheet_view.js"></script>
</head>
<body>
</body>
</html>
/*globals window, rJS, Handlebars, RSVP, console*/
/*jslint indent: 2, nomen: true, maxlen: 80*/
(function (window, document, RSVP, rJS, Handlebars, loopEventListener, promiseEventListener, alertify) {
"use strict";
var gadget_klass = rJS(window),
source = gadget_klass.__template_element
.querySelector(".view-expense-sheet-template")
.innerHTML,
template = Handlebars.compile(source);
function drawSvgString(title, number) {
var i = 0,
default_x = -2473.00382,
default_rotate_y = -867.000793457031,
step = 80,
max = 1970,
string_title_number = '',
base = '<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="2100"><g><title>' + (title + ' ' + number)+ '</title><rect x="-1" y="-1" width="100%" height="2102" id="canvas_background" fill="#b2b2b2"/><rect id="svg" width="100%" height="100%" x="0" y="0" stroke-width="0" fill="url(#gridpattern)"/></g><g>';
if (! title && !number) {
return '';
}
while(string_title_number.length < 500) {
string_title_number += title + ' ' + number + ' ';
}
if (window.innerWidth > max) {
max = window.innerWidth;
}
for (i = 0; i < max*2 / step; i += 1){
base += '<text fill="#000000" stroke="#000" stroke-width="0" x=' + (default_x + i * step) + ' y="977.99989" id="svg_' + i + '" font-size="24" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" opacity="0.45" transform="rotate(-45,' + (default_rotate_y + i * step) +',971.9843750000001) ">';
base += string_title_number + '</text>';
}
return base + '</g></svg>';
}
gadget_klass
.ready(function (g) {
return g.getElement()
.push(function (element) {
alertify.set({ delay: 1500 });
g.props = {};
g.props.element = element;
g.props.deferred = RSVP.defer();
});
})
.declareAcquiredMethod("updateHeader", "updateHeader")
.declareAcquiredMethod("get", "jio_get")
.declareAcquiredMethod("put", "jio_put")
.declareAcquiredMethod("post", "jio_post")
.declareAcquiredMethod("translateHtml", "translateHtml")
.declareAcquiredMethod('allDocs', 'jio_allDocs')
.declareAcquiredMethod("redirect", "redirect")
.declareAcquiredMethod('jio_remove', 'jio_remove')
.declareAcquiredMethod('getSetting', 'getSetting')
.declareAcquiredMethod('setSetting', 'setSetting')
.declareMethod('triggerSubmit', function () {
return this.props.element.querySelector('button').click();
})
.declareMethod("render", function (options) {
var gadget = this,
sync_checked,
state = window.getWorkflowState(options),
not_sync_checked;
gadget.options = options;
return new RSVP.Queue()
.push(function () {
var ops;
if (options.doc.sync_flag === '1') {
sync_checked = 'checked';
} else {
not_sync_checked = 'checked';
}
ops = {
title: options.doc.title,
number: options.doc.number,
sync_checked: sync_checked,
not_sync_checked: not_sync_checked,
not_readonly: !state.readonly
};
return gadget.translateHtml(template(ops));
})
.push(function (html) {
gadget.props.element.innerHTML = html;
gadget.props.element.querySelector('.svg').innerHTML = options.doc.text_content || '';//drawSvgString(options.doc.title || '', options.doc.number || '');
return gadget.updateHeader({
title: gadget.options.jio_key,
save_action: !state.readonly,
breadcrumb_url: '#page=expense_sheet_list'
});
})
.push(function () {
gadget.props.deferred.resolve();
});
})
.declareService(function () {
var gadget = this,
form = gadget.props.element.querySelector('form.view-expense-sheet-form');
return new RSVP.Queue()
.push(function () {
return gadget.props.deferred.promise;
})
.push(function () {
return loopEventListener(
form,
'submit',
false,
function (submit_event) {
var i,
doc = {
parent_relative_url: "expense_sheet_module",
portal_type: "Expense Sheet",
modification_date: new Date().toISOString()
};
for (i = 0; i < submit_event.target.length; i += 1) {
if ((form[i].type == "radio") && !form[i].checked){
continue;
}
if (submit_event.target[i].value) {
doc[submit_event.target[i].name] = submit_event.target[i].value;
}
}
doc.text_content = gadget.props.element.querySelector('.svg').innerHTML;
if (doc.sync_flag === '1'){
doc.reference = 'expense_sheet';
}
return gadget.put(gadget.options.jio_key, doc)
.push(function () {
alertify.success("Saved");
if (doc.sync_flag === '1') {
return gadget.redirect();
}
});
});
});
})
.declareService(function () {
var gadget = this;
return new RSVP.Queue()
.push(function () {
return gadget.props.deferred.promise;
})
.push(function () {
return RSVP.any([
loopEventListener(
gadget.props.element.querySelector('.title'),
'input',
false,
function (event) {
gadget.props.element.querySelector('.svg').innerHTML = drawSvgString(event.target.value, gadget.props.element.querySelector('.number').value);
}),
loopEventListener(
gadget.props.element.querySelector('.number'),
'input',
false,
function (event) {
gadget.props.element.querySelector('.svg').innerHTML = drawSvgString(gadget.props.element.querySelector('.title').value, event.target.value);
})]);
});
});
}(window, document, RSVP, rJS, Handlebars, loopEventListener, promiseEventListener, alertify));
\ No newline at end of file
...@@ -173,6 +173,12 @@ gadget_officejs_jio_travel_request_record_view.html\n ...@@ -173,6 +173,12 @@ gadget_officejs_jio_travel_request_record_view.html\n
gadget_officejs_jio_travel_request_record_view.js\n gadget_officejs_jio_travel_request_record_view.js\n
\n \n
\n \n
gadget_officejs_page_expense_sheet_list.html\n
gadget_officejs_page_expense_sheet_list.js\n
gadget_officejs_page_add_expense_sheet.html\n
gadget_officejs_page_add_expense_sheet.js\n
gadget_officejs_jio_expense_sheet_view.html\n
gadget_officejs_jio_expense_sheet_view.js\n
\n \n
alertify.css\n alertify.css\n
alertify.js\n alertify.js\n
...@@ -344,7 +350,7 @@ NETWORK:\n ...@@ -344,7 +350,7 @@ NETWORK:\n
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>964.46131.23570.5051</string> </value> <value> <string>966.54125.49590.58624</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -362,8 +368,8 @@ NETWORK:\n ...@@ -362,8 +368,8 @@ NETWORK:\n
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1515520816.9</float> <float>1523605496.88</float>
<string>UTC</string> <string>GMT+2</string>
</tuple> </tuple>
</state> </state>
</object> </object>
......
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>OfficeJS Expense Sheet List</title>
<script src="rsvp.js"></script>
<script src="renderjs.js"></script>
<script src="gadget_officejs_page_expense_sheet_list.js"></script>
</head>
<body>
<div class="expense_sheet_listbox"></div>
</body>
</html>
/*globals window, RSVP, rJS, document*/
/*jslint indent: 2, nomen: true, maxlen: 80*/
(function (window, RSVP, rJS, document) {
"use strict";
var gadget_klass = rJS(window);
gadget_klass
.ready(function (g) {
g.props = {};
return g.getElement()
.push(function (element) {
g.props.element = element;
});
})
.declareAcquiredMethod("translate", "translate")
.declareAcquiredMethod("translateHtml", "translateHtml")
.declareAcquiredMethod("getUrlFor", "getUrlFor")
.declareAcquiredMethod("updateHeader", "updateHeader")
.declareAcquiredMethod('getSetting', 'getSetting')
.declareAcquiredMethod("jio_allDocs", "jio_allDocs")
.allowPublicAcquisition("jio_allDocs", function (param_list) {
var gadget = this;
return this.jio_allDocs.apply(this, param_list)
.push(function (result) {
var i,
len;
for (i = 0, len = result.data.total_rows; i < len; i += 1) {
if (result.data.rows[i].id.indexOf("module") === -1) {
result.data.rows[i].value.state = "Not synced!";
} else {
result.data.rows[i].value.state = "Synced!";
}
}
return result;
});
})
.declareMethod("render", function (options) {
var gadget = this;
return new RSVP.Queue()
.push(function () {
gadget.props.portal_type = "Expense Sheet";
gadget.props.document_title_plural = "Expense Sheets";
return gadget.getUrlFor({page: "add_expense_sheet"});
})
.push(function (url) {
return gadget.updateHeader({
title: gadget.props.document_title_plural,
add_url: url
});
})
.push(function () {
return gadget.declareGadget("gadget_officejs_widget_listbox.html", {element: gadget.props.element.querySelector('.expense_sheet_listbox')});
})
.push(function (listbox) {
return listbox.render({
search_page: 'expense_sheet_list',
search: options.search,
column_list: [{
select: 'title',
title: 'Title'
}, {
select: 'number',
title: 'Number'
}, {
select: 'state',
title: 'State'
}],
query: {
query: 'portal_type:("' + gadget.props.portal_type + '")',
select_list: ['title','number', 'state'],
sort_on: [["title", "descending"]]
}
});
});
});
}(window, RSVP, rJS, document));
\ No newline at end of file
...@@ -295,6 +295,7 @@ ...@@ -295,6 +295,7 @@
'OR (portal_type: "Leave Report Record" AND simulation_state:"stopped") ' + 'OR (portal_type: "Leave Report Record" AND simulation_state:"stopped") ' +
'OR (portal_type: "Leave Request Record" AND (simulation_state:"draft" OR simulation_state:"sent" OR simulation_state:"stopped")) ' + 'OR (portal_type: "Leave Request Record" AND (simulation_state:"draft" OR simulation_state:"sent" OR simulation_state:"stopped")) ' +
'OR (portal_type: "Localisation Record" AND (simulation_state:"draft" OR simulation_state:"stopped")) ' + 'OR (portal_type: "Localisation Record" AND (simulation_state:"draft" OR simulation_state:"stopped")) ' +
'OR (portal_type: "Expense Sheet" AND (reference: "expense_sheet")) ' +
'OR (portal_type: "Currency" AND validation_state:"validated") ' + 'OR (portal_type: "Currency" AND validation_state:"validated") ' +
'OR (portal_type: "Service" AND validation_state:"validated") ' + 'OR (portal_type: "Service" AND validation_state:"validated") ' +
'OR (portal_type: "Person" AND id: "' + me.split("/")[1] + '")', 'OR (portal_type: "Person" AND id: "' + me.split("/")[1] + '")',
......
...@@ -225,7 +225,7 @@ ...@@ -225,7 +225,7 @@
</item> </item>
<item> <item>
<key> <string>actor</string> </key> <key> <string>actor</string> </key>
<value> <string>cedric.le.ninivin</string> </value> <value> <string>zope</string> </value>
</item> </item>
<item> <item>
<key> <string>comment</string> </key> <key> <string>comment</string> </key>
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>961.60854.27381.38212</string> </value> <value> <string>966.50115.49905.16025</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,8 +257,8 @@ ...@@ -257,8 +257,8 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1505399165.67</float> <float>1523364927.08</float>
<string>UTC</string> <string>GMT+2</string>
</tuple> </tuple>
</state> </state>
</object> </object>
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
<li><a href="#page=expense_record_list" data-i18n="Expenses">Expenses</a></li> <li><a href="#page=expense_record_list" data-i18n="Expenses">Expenses</a></li>
<li><a href="#page=travel_request_record_list" data-i18n="Travels">Travels</a></li> <li><a href="#page=travel_request_record_list" data-i18n="Travels">Travels</a></li>
<li><a href="#page=leave_request_record_list" data-i18n="Leaves">Leaves</a></li> <li><a href="#page=leave_request_record_list" data-i18n="Leaves">Leaves</a></li>
<li><a href="#page=expense_sheet_list" data-i18n="Expense Sheet">Expense Sheet</a></li>
<li><a href="#page=calendar" data-i18n="Calendar">Calendar</a></li> <li><a href="#page=calendar" data-i18n="Calendar">Calendar</a></li>
<li><a href="#page=localisation" data-i18n="Map">Map</a></li> <li><a href="#page=localisation" data-i18n="Map">Map</a></li>
<li><a href="#page=expense_report" data-i18n="Reports">Reports</a></li> <li><a href="#page=expense_report" data-i18n="Reports">Reports</a></li>
......
...@@ -269,7 +269,7 @@ ...@@ -269,7 +269,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>957.9325.31917.28330</string> </value> <value> <string>966.48804.57481.19029</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -287,8 +287,8 @@ ...@@ -287,8 +287,8 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1486477634.11</float> <float>1523286530.45</float>
<string>UTC</string> <string>GMT+2</string>
</tuple> </tuple>
</state> </state>
</object> </object>
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
<portal_type id="Expense Record Module"> <portal_type id="Expense Record Module">
<item>Expense Record</item> <item>Expense Record</item>
</portal_type> </portal_type>
<portal_type id="Expense Sheet Module">
<item>Expense Sheet</item>
</portal_type>
<portal_type id="Expense Validation Request Module"> <portal_type id="Expense Validation Request Module">
<item>Expense Validation Request</item> <item>Expense Validation Request</item>
</portal_type> </portal_type>
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
<portal_type id="Expense Record Module"> <portal_type id="Expense Record Module">
<item>business_application</item> <item>business_application</item>
</portal_type> </portal_type>
<portal_type id="Expense Sheet Module">
<item>business_application</item>
</portal_type>
<portal_type id="Expense Validation Request Module"> <portal_type id="Expense Validation Request Module">
<item>business_application</item> <item>business_application</item>
</portal_type> </portal_type>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Base Type" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_property_domain_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>content_icon</string> </key>
<value> <string>folder_icon.gif</string> </value>
</item>
<item>
<key> <string>factory</string> </key>
<value> <string>addFolder</string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<tuple>
<string>module</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Expense Sheet Module</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Base Type</string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Folder</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>short_title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <string>erp5_ui</string> </value>
</item>
<item>
<key> <string>property_name</string> </key>
<value> <string>short_title</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <string>erp5_ui</string> </value>
</item>
<item>
<key> <string>property_name</string> </key>
<value> <string>title</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Base Type" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>content_icon</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>factory</string> </key>
<value> <string>addXMLObject</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Expense Sheet</string> </value>
</item>
<item>
<key> <string>init_script</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>permission</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Base Type</string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>TextDocument</string> </value>
</item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>type_mixin</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -3,6 +3,10 @@ ...@@ -3,6 +3,10 @@
<type>Expense Record</type> <type>Expense Record</type>
<workflow>document_conversion_interaction_workflow, edit_workflow, event_interaction_workflow, event_simulation_workflow, pricing_interaction_workflow</workflow> <workflow>document_conversion_interaction_workflow, edit_workflow, event_interaction_workflow, event_simulation_workflow, pricing_interaction_workflow</workflow>
</chain> </chain>
<chain>
<type>Expense Sheet</type>
<workflow>edit_workflow</workflow>
</chain>
<chain> <chain>
<type>Expense Validation Request</type> <type>Expense Validation Request</type>
<workflow>edit_workflow, expense_validation_request_interaction_workflow, pricing_interaction_workflow, ticket_acceptance_simulation_workflow, ticket_interaction_workflow, ticket_record_interaction_workflow</workflow> <workflow>edit_workflow, expense_validation_request_interaction_workflow, pricing_interaction_workflow, ticket_acceptance_simulation_workflow, ticket_interaction_workflow, ticket_record_interaction_workflow</workflow>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>Base_doSelect</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list>
<string>listbox</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ExpenseSheetModule_viewExpenseSheetList</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>ExpenseSheetModule_viewExpenseSheetList</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_list</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Expense sheets</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>columns</string>
<string>selection_name</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>listbox</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>number</string>
<string>Number</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_list_mode_listbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value>
<list>
<tuple>
<string>Expense Sheet</string>
<string>Expense Sheet</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string>expense_sheet_module_selection</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Expense sheets</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>Base_edit</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom (Preview)</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom (Preview)</string> </key>
<value>
<list>
<string>text_content</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list>
<string>my_title</string>
<string>my_number</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ExpenseSheet_view</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>ExpenseSheet_view</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_view</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expense sheet</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>css_class</string>
<string>default</string>
<string>image_display</string>
<string>image_format</string>
<string>image_pre_converted_only</string>
<string>image_quality</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>text_content</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string>field</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_image_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>image_display</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>image_format</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>image_pre_converted_only</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>image_quality</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: "data:%s,%s" % (context.getContentType("image/svg+xml"), context.getTextContent(""))</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>Base_edit</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom (Preview)</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom (Preview)</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list>
<string>my_title</string>
<string>my_number</string>
<string>my_text_content</string>
<string>your_modification_date</string>
<string>your_sync_flag</string>
<string>my_reference</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ExpenseSheet_viewAsJio</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>ExpenseSheet_view</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_view</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expense sheet</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -3,6 +3,9 @@ Currency | jio_view ...@@ -3,6 +3,9 @@ Currency | jio_view
Expense Record Module | view Expense Record Module | view
Expense Record | jio_view Expense Record | jio_view
Expense Record | view Expense Record | view
Expense Sheet Module | view
Expense Sheet | jio_view
Expense Sheet | view
Expense Validation Request Module | view Expense Validation Request Module | view
Expense Validation Request | jump_to_related_transaction Expense Validation Request | jump_to_related_transaction
Expense Validation Request | records Expense Validation Request | records
......
expense_record_module expense_record_module
expense_sheet_module
expense_validation_request_module expense_validation_request_module
record_module record_module
travel_request_module travel_request_module
\ No newline at end of file
Expense Record Module | Expense Record Expense Record Module | Expense Record
Expense Sheet Module | Expense Sheet
Expense Validation Request Module | Expense Validation Request Expense Validation Request Module | Expense Validation Request
Record Module | Leave Report Record Record Module | Leave Report Record
Record Module | Leave Request Record Record Module | Leave Request Record
......
Expense Record Module | business_application Expense Record Module | business_application
Expense Sheet Module | business_application
Expense Validation Request Module | business_application Expense Validation Request Module | business_application
Record Module | business_application Record Module | business_application
Travel Request Module | business_application Travel Request Module | business_application
\ No newline at end of file
Expense Record Expense Record
Expense Record Module Expense Record Module
Expense Sheet
Expense Sheet Module
Expense Validation Request Expense Validation Request
Expense Validation Request Module Expense Validation Request Module
Leave Report Record Leave Report Record
......
...@@ -4,6 +4,7 @@ Expense Record | event_interaction_workflow ...@@ -4,6 +4,7 @@ Expense Record | event_interaction_workflow
Expense Record | event_simulation_workflow Expense Record | event_simulation_workflow
Expense Record | event_simulation_workflow Expense Record | event_simulation_workflow
Expense Record | pricing_interaction_workflow Expense Record | pricing_interaction_workflow
Expense Sheet | edit_workflow
Expense Validation Request | edit_workflow Expense Validation Request | edit_workflow
Expense Validation Request | expense_validation_request_interaction_workflow Expense Validation Request | expense_validation_request_interaction_workflow
Expense Validation Request | pricing_interaction_workflow Expense Validation Request | pricing_interaction_workflow
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment