unclean SPARC
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
<style>
|
||||
.expert-dashboard > header { background-color: rgb(8, 64, 143); }
|
||||
.expert-dashboard .todo { min-width: 240px; }
|
||||
.expert-dashboard .projects-list {
|
||||
display: grid;
|
||||
grid-gap: var(--eicui-base-spacing-m);
|
||||
grid-template-columns: repeat(auto-fill, 240px);
|
||||
}
|
||||
.expert-dashboard .projects-list article { cursor: pointer; }
|
||||
.expert-dashboard .projects-list article:hover {
|
||||
background-color: var(--eicui-base-color-info-10);
|
||||
}
|
||||
.projects-list section { text-align: center; }
|
||||
</style>
|
||||
<article eiccard media class="expert-dashboard">
|
||||
<header>
|
||||
<h1>Expert dashboard</h1>
|
||||
<h2></h2>
|
||||
</header>
|
||||
<section>
|
||||
<div class="cols-2 left">
|
||||
<div>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>General information</h1>
|
||||
<h2></h2>
|
||||
</header>
|
||||
<section>
|
||||
<ul nonbulleted>
|
||||
<li>
|
||||
<label>...</label>
|
||||
<span>...</span>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard danger class="todo">
|
||||
<header>
|
||||
<h1>TODOs</h1>
|
||||
<h2></h2>
|
||||
</header>
|
||||
<section>
|
||||
<ul bulleted>
|
||||
<li>2 invitations</li>
|
||||
<li>1 report pending</li>
|
||||
</ul>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>Assigned projects</h1>
|
||||
<h2></h2>
|
||||
</header>
|
||||
<section>
|
||||
<ul class="projects-list" nonbulleted></ul>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
*/
|
||||
|
||||
class ProjectFundingExpertDashboardView extends EICDomContent {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
this.components = ui.eicfy(this.el);
|
||||
|
||||
for(let model in options.models) this[model] = options.models[model];
|
||||
|
||||
this.list = this.find('.projects-list');
|
||||
/*
|
||||
this.list = new DataGrid(this.find('[eicdatagrid]'), {
|
||||
headers: [
|
||||
{label: 'number', filter: 'text', sortable: true},
|
||||
{label: 'acronym', filter: 'text', sortable: true},
|
||||
{label: 'organisation', filter: 'text', sortable: true},
|
||||
{label: 'phase', filter: 'list', sortable: true},
|
||||
{label: 'status', filter: 'list', sortable: true},
|
||||
{label: 'updated', type: 'dateTime', filter: 'list', sortable: true}
|
||||
]
|
||||
});
|
||||
this.list.onRowClick = this.onProjectSelect.bind(this);
|
||||
this.list.loading = true;
|
||||
*/
|
||||
app.events.channel.addEventListener('project_node_updated', this.onProjectUpdated.bind(this))
|
||||
|
||||
this.projects.get('techdd')
|
||||
.then(this.refreshProjects.bind(this));
|
||||
}
|
||||
|
||||
refreshProjects(data) {
|
||||
/*
|
||||
this.list.loading = false;
|
||||
this.list.clear();
|
||||
|
||||
for(let item of data) {
|
||||
for(let phase of item.phases) {
|
||||
let id = JSON.stringify({
|
||||
number: item.project.number,
|
||||
node: phase.type,
|
||||
nodeId: phase.id
|
||||
})
|
||||
this.list.addRow(id, [
|
||||
item.project.number,
|
||||
item.project.acronym,
|
||||
item.organisation.name,
|
||||
phase.type,
|
||||
phase.statusHistory[0].value,
|
||||
phase.statusHistory[0].dateTime
|
||||
])
|
||||
}
|
||||
*/
|
||||
this.list.innerHTML = '';
|
||||
|
||||
for(let item of data) {
|
||||
|
||||
for(let phase of item.phases) {
|
||||
|
||||
if(phase.type != 'techdd') continue;
|
||||
let id = JSON.stringify({
|
||||
number: item.project.number,
|
||||
node: phase.type,
|
||||
nodeId: phase.id
|
||||
})
|
||||
|
||||
let version = 'Regular'
|
||||
|
||||
switch(phase.version) {
|
||||
case 'techdd-report-v1-enhanced':
|
||||
version = 'Enhanced'
|
||||
break;
|
||||
case 'techdd-report-v1-full':
|
||||
version = 'Full'
|
||||
break;
|
||||
}
|
||||
|
||||
let card = ui.create(`<article eiccard>
|
||||
<header>
|
||||
<h1>${item.project.acronym}</h1>
|
||||
<h2>${item.project.number}</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<span eicchip info>${version}</span>
|
||||
<span eicchip primary>${app.meta.getItem('icmp-techdd-status', phase.statusHistory[0].value).label}</span>
|
||||
</div>
|
||||
<p small>${ui.format.dateTime(phase.statusHistory[0].dateTime)}</p>
|
||||
</section>
|
||||
</article>`);
|
||||
card.dataset.id = id;
|
||||
card.addEventListener('click', this.onProjectSelect)
|
||||
this.list.append(card)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onProjectSelect(event) {
|
||||
//let id = JSON.parse(row.dataset.id)
|
||||
let id = JSON.parse(event.currentTarget.dataset.id)
|
||||
app.Router.route(`/icmp/projects/${id.number}/${id.node}/${id.nodeId}`, { });
|
||||
}
|
||||
|
||||
onProjectUpdated() {
|
||||
this.projects.get('techdd')
|
||||
.then(this.refreshProjects.bind(this));
|
||||
}
|
||||
}
|
||||
|
||||
app.registerClass('ProjectFundingExpertDashboardView',ProjectFundingExpertDashboardView);
|
||||
@@ -0,0 +1,48 @@
|
||||
<style>
|
||||
.fundings-dashboard {}
|
||||
.fundings-dashboard > header {
|
||||
background-color: rgb(8, 64, 143);
|
||||
}
|
||||
.fundings-dashboard .projects-nav {
|
||||
min-height: 120px;
|
||||
height: 210px;
|
||||
}
|
||||
.fundings-dashboard .activities {
|
||||
min-width: 240px;
|
||||
}
|
||||
.fundings-dashboard .projects-list .grid-row {
|
||||
grid-template-columns: 120px auto 1fr 120px 120px 1fr 120px;
|
||||
}
|
||||
.fundings-dashboard .projects-list .dataset .cell:nth-child(2) { text-align: right; }
|
||||
.fundings-dashboard .projects-list .dataset .cell:nth-child(5),
|
||||
.fundings-dashboard .projects-list .dataset .cell:nth-child(6),
|
||||
.fundings-dashboard .projects-list .dataset .cell:nth-child(7) { text-align: center; }
|
||||
|
||||
</style>
|
||||
<article eiccard media class="fundings-dashboard">
|
||||
<header>
|
||||
<h1>ICMP</h1>
|
||||
<h2 >Investment Coordination and Monitoring Platform</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div eicnodemap class="projects-nav"></div>
|
||||
<h2>Technical Due Diligences</h2>
|
||||
|
||||
<div class="cols-2 left">
|
||||
<div>
|
||||
<article eiccard danger class="activities">
|
||||
<header>
|
||||
<h1>Checks</h1>
|
||||
</header>
|
||||
<section>
|
||||
<ul bulleted></ul>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
<div>
|
||||
<div eicdatagrid class="projects-list"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</article>
|
||||
@@ -0,0 +1,191 @@
|
||||
/**
|
||||
*/
|
||||
|
||||
class ProjectFundingPODashboardView extends EICDomContent {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
this.components = ui.eicfy(this.el);
|
||||
|
||||
for(let model in options.models) this[model] = options.models[model];
|
||||
|
||||
this.list = new DataGrid(this.find('.projects-list'), {
|
||||
height: '39vh',
|
||||
headers: [
|
||||
{label: 'number', filter: 'text', sortable: true},
|
||||
{label: 'Acronym', filter: 'text', sortable: true},
|
||||
{label: 'Organisation', filter: 'text', sortable: true},
|
||||
{label: 'Type', filter: 'list', sortable: true},
|
||||
{label: 'Status', filter: 'list', sortable: true},
|
||||
{label: 'Referrer', type: 'markup', filter: 'text', sortable: false},
|
||||
{label: 'Last update', type: 'date', filter: 'text', sortable: true},
|
||||
]
|
||||
});
|
||||
this.list.onRowClick = this.onProjectSelect.bind(this);
|
||||
|
||||
this.nav = new NodeMap(this.find('[eicnodemap]'), {
|
||||
"orientation": "linear",
|
||||
"resizable": true,
|
||||
"allowDrag": true,
|
||||
"entity": {
|
||||
"width": 160,
|
||||
"height": 80,
|
||||
"gap": 60
|
||||
}
|
||||
});
|
||||
this.nav.click = this.onNavChange.bind(this);
|
||||
|
||||
app.events.channel.addEventListener('project_node_updated', this.onProjectUpdated.bind(this))
|
||||
app.Assets.loadJson({name:'workflows/wf-projects-funding.json'})
|
||||
.then(this.setupWorflow.bind(this));
|
||||
|
||||
this.list.loading = true;
|
||||
|
||||
this.projects.get('techdd')
|
||||
.then(this.refreshProjects.bind(this));
|
||||
}
|
||||
|
||||
setupWorflow(data) { this.nav.data = data; }
|
||||
|
||||
refreshProjects(data) {
|
||||
this.list.loading = false;
|
||||
this.list.clear();
|
||||
|
||||
this.todos = [];
|
||||
|
||||
let metrics = {
|
||||
draft: 0,
|
||||
approval: 0,
|
||||
rejected: 0
|
||||
}
|
||||
|
||||
let phases = {}
|
||||
|
||||
for(let item of data) {
|
||||
for(let phase of item.phases) {
|
||||
let id = JSON.stringify({
|
||||
number: item.project.number,
|
||||
node: phase.type,
|
||||
nodeId: phase.id
|
||||
})
|
||||
|
||||
let status = '';
|
||||
let label = app.meta.getItem('icmp-techdd-status', phase.statusHistory[0].value).label;
|
||||
let severity = '';
|
||||
let version = 'Regular'
|
||||
|
||||
switch(phase.version) {
|
||||
case 'techdd-report-v1-enhanced':
|
||||
version = 'Enhanced'
|
||||
break;
|
||||
case 'techdd-report-v1-full':
|
||||
version = 'Full'
|
||||
break;
|
||||
}
|
||||
|
||||
switch(phase.statusHistory[0].value) {
|
||||
case 'created':
|
||||
case 'updated':
|
||||
status = 'draft';
|
||||
severity = 'info'
|
||||
break;
|
||||
case 'submitted':
|
||||
case 'submitting':
|
||||
status = 'approval';
|
||||
severity = 'accent'
|
||||
break;
|
||||
default:
|
||||
status = phase.statusHistory[0].value;
|
||||
severity = 'danger'
|
||||
}
|
||||
|
||||
let contributors = [];
|
||||
for(let contributor of item.project.contributors) {
|
||||
let fullname = contributor.information.name.firstName + ' ' + contributor.information.name.lastName;
|
||||
let component = new UserIcon(null, {uuid: contributor.euLoginId, fullname: fullname, showStatus: true})
|
||||
contributors.push(`<span style="font-size:0">${fullname}</span>` + component.el.outerHTML)
|
||||
}
|
||||
|
||||
let row = this.list.addRow(id, [
|
||||
item.project.number,
|
||||
item.project.acronym,
|
||||
item.organisation.name,
|
||||
version,
|
||||
`<span eicchip small ${severity}>${label}</span>`,
|
||||
contributors.join(''),
|
||||
phase.statusHistory[0].dateTime
|
||||
])
|
||||
|
||||
if(item.project.contributor) {
|
||||
row.setAttribute('accent', '')
|
||||
}
|
||||
|
||||
phases[phase.type] = phases[phase.type] ? phases[phase.type] + 1: 1;
|
||||
|
||||
metrics[status]++;
|
||||
}
|
||||
}
|
||||
|
||||
if(metrics.approval > 0) {
|
||||
this.todos.push({
|
||||
scope: 'projects',
|
||||
message: `${metrics.approval} report${metrics.approval > 1 ? 's':''} requesting review`
|
||||
})
|
||||
}
|
||||
if(metrics.draft > 0) {
|
||||
this.todos.push({
|
||||
scope: 'projects',
|
||||
message: `${metrics.draft} report${metrics.draft > 1 ? 's':''} being drafted`
|
||||
})
|
||||
}
|
||||
if(metrics.rejected > 0) {
|
||||
this.todos.push({
|
||||
scope: 'projects',
|
||||
message: `${metrics.rejected} project${metrics.rejected > 1 ? 's':''} requesting reopening`
|
||||
})
|
||||
}
|
||||
|
||||
this.refreshMetrics(phases);
|
||||
this.refreshTodos();
|
||||
}
|
||||
|
||||
refreshMetrics(data) {
|
||||
for(let id in data) {
|
||||
let node = this.nav.entities.find(o => o.id == id)
|
||||
node.badge = data[id];
|
||||
}
|
||||
}
|
||||
|
||||
refreshTodos() {
|
||||
let activities = this.find('.activities ul')
|
||||
activities.innerHTML = '';
|
||||
if(this.todos.length > 0) {
|
||||
ui.show(activities);
|
||||
for(let activity of this.todos) {
|
||||
activities.append(ui.create(`<li>${activity.message}</li>`))
|
||||
}
|
||||
} else {
|
||||
ui.hide(activities);
|
||||
}
|
||||
}
|
||||
|
||||
onNavChange(node) {
|
||||
switch(node.id) {
|
||||
case 'techdd':
|
||||
break;
|
||||
default:
|
||||
ui.growl.append('You don\'t have access to this resource', 'danger', 900)
|
||||
}
|
||||
}
|
||||
|
||||
onProjectSelect(row) {
|
||||
let id = JSON.parse(row.dataset.id)
|
||||
app.Router.route(`/icmp/projects/${id.number}/${id.node}/${id.nodeId}`, { });
|
||||
}
|
||||
|
||||
onProjectUpdated() {
|
||||
this.projects.get('techdd')
|
||||
.then(this.refreshProjects.bind(this));
|
||||
}
|
||||
}
|
||||
|
||||
app.registerClass('ProjectFundingPODashboardView',ProjectFundingPODashboardView);
|
||||
@@ -0,0 +1,102 @@
|
||||
<style>
|
||||
.project-funding-sheet > header {
|
||||
background-color: black;
|
||||
}
|
||||
.project-funding-sheet > header h2 {
|
||||
white-space: normal !important;
|
||||
line-height: 120% !important;
|
||||
}
|
||||
.project-funding-sheet .funding-nav {
|
||||
min-height: 120px;
|
||||
height: 120px;
|
||||
}
|
||||
.project-funding-sheet .side-info {
|
||||
min-width: 240px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<article eiccard media class="project-funding-sheet">
|
||||
<header>
|
||||
<h1 class="project-acronym">...</h1>
|
||||
<h2 class="project-title">...</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div class="cols-2 left">
|
||||
<div class="side-info">
|
||||
<article eiccard collapsable class="project-info">
|
||||
<header>
|
||||
<h1>Project information</h1>
|
||||
<h2></h2>
|
||||
</header>
|
||||
<section>
|
||||
<div class="project-number">
|
||||
<label xsmall>Number</label><span></span>
|
||||
</div>
|
||||
<div class="project-instrument">
|
||||
<label xsmall>Instrument</label><span></span>
|
||||
</div>
|
||||
<div class="project-cutoff">
|
||||
<label xsmall>Cutoff</label><span></span>
|
||||
</div>
|
||||
<div class="project-funding-type">
|
||||
<label xsmall>Funding type</label><span></span>
|
||||
</div>
|
||||
<div class="project-signature">
|
||||
<label xsmall>Signature date</label><span></span>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard collapsable collapsed class="org-info">
|
||||
<header>
|
||||
<h1>Organisation</h1>
|
||||
<h2></h2>
|
||||
</header>
|
||||
<section>
|
||||
<div class="org-name">
|
||||
<label xsmall>Name</label><b><span></span></b>
|
||||
</div>
|
||||
<div class="org-pic">
|
||||
<label xsmall>PIC</label><span></span>
|
||||
</div>
|
||||
<div class="org-location">
|
||||
<label xsmall>Address</label>
|
||||
<span class="org-street"></span></br>
|
||||
<span class="org-postcode"></span> <span class="org-city"></span></br>
|
||||
<span class="org-country"></span>
|
||||
</div>
|
||||
<div class="org-website">
|
||||
<label xsmall>Website</label><span></span>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
<div>
|
||||
<div class="cols-2 right">
|
||||
<div eicnodemap class="funding-nav"></div>
|
||||
<div eicdropdown>
|
||||
<button eicbutton small rounded icon="icon-more" ></button>
|
||||
<menu eicmenu>
|
||||
<li menuitem>
|
||||
<a href="#" title="Project documents" data-target="docs" class="button aggregation">
|
||||
<i class="icon-folder-open"></i><label small>Project documents</label>
|
||||
</a>
|
||||
</li>
|
||||
<li menuitem>
|
||||
<a href="#" title="Project contributors" data-target="team" class="button aggregation">
|
||||
<i class="icon-users"></i><label small>People involved</label>
|
||||
</a>
|
||||
</li>
|
||||
<li menuitem>
|
||||
<a href="#" title="Project history" data-target="history" class="button aggregation">
|
||||
<i class="icon-history"></i><label small>Project history</label>
|
||||
</a>
|
||||
</li>
|
||||
</menu>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</article>
|
||||
@@ -0,0 +1,252 @@
|
||||
/**
|
||||
*/
|
||||
|
||||
class ProjectFundingProjectView extends EICDomContent {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
|
||||
this.number = options.projectNumber
|
||||
this.node = options.node;
|
||||
this.nodeId = options.nodeId;
|
||||
|
||||
for(let model in options.models) this[model] = options.models[model];
|
||||
|
||||
this.components = ui.eicfy(this.el);
|
||||
|
||||
// reference to embedded articles
|
||||
this.panels = {
|
||||
project: this.components.find(o => o.el.classList.contains('project-info')),
|
||||
org: this.components.find(o => o.el.classList.contains('org-info'))
|
||||
}
|
||||
|
||||
this.nav = new NodeMap(this.find('[eicnodemap]'), {
|
||||
"orientation": "linear",
|
||||
"resizable": true,
|
||||
"allowDrag": true,
|
||||
"entity": {
|
||||
"width": 150,
|
||||
"height": 50,
|
||||
"gap": 30
|
||||
}
|
||||
});
|
||||
this.nav.click = this.onProjectNodeSelect.bind(this);
|
||||
|
||||
this.addEventTo('.button.aggregation', 'click', this.onAggregationSelect.bind(this))
|
||||
app.events.channel.addEventListener('project_node_updated', this.onProjectNodeUpdate.bind(this));
|
||||
this.panels.project.loading = true;
|
||||
this.panels.org.loading = true;
|
||||
|
||||
this.project.get(this.number)
|
||||
.then(this.fillProject.bind(this));
|
||||
}
|
||||
|
||||
DOMContentBlured() {
|
||||
if(this.currentPart) {
|
||||
this.currentPart.DOMContentBlured()
|
||||
}
|
||||
}
|
||||
|
||||
DOMContentRemoved() {
|
||||
if(this.currentPart) {
|
||||
this.currentPart.DOMContentRemoved()
|
||||
}
|
||||
}
|
||||
|
||||
DOMContentFocused() {
|
||||
if(this.currentPart) {
|
||||
this.currentPart.DOMContentFocused()
|
||||
}
|
||||
}
|
||||
|
||||
fillProject(data) {
|
||||
|
||||
this.panels.project.loading = false;
|
||||
this.panels.org.loading = false;
|
||||
|
||||
this.find('.project-number span').innerHTML = data.project.number;
|
||||
this.find('.project-instrument span').innerHTML = app.meta.getItem('icmp-instruments', data.project.instrument).label;
|
||||
this.find('.project-cutoff span').innerHTML = ui.format.date(data.project.cutOffDate);
|
||||
this.find('.project-acronym').innerHTML = data.project.acronym;
|
||||
this.find('.project-title').innerHTML = data.project.title;
|
||||
this.find('.org-name span').innerHTML = data.organisation.name;
|
||||
this.find('.org-pic span').innerHTML = data.organisation.pic;
|
||||
this.find('.org-location .org-street').innerHTML = data.organisation.street || '';
|
||||
this.find('.org-location .org-postcode').innerHTML = data.organisation.postalCode || '';
|
||||
this.find('.org-location .org-city').innerHTML = data.organisation.city || '';
|
||||
this.find('.org-location .org-country').innerHTML = app.meta.getItem('icmp-countries', data.organisation.country).label;
|
||||
if(data.organisation.website) {
|
||||
this.find('.org-website span').innerHTML = `<a href="${ui.format.url(data.organisation.website)}" title="${data.organisation.name} website" target="_blank">${data.organisation.website}</a>`;
|
||||
} else {
|
||||
ui.hide(this.find('.org-website'))
|
||||
}
|
||||
this.find('.project-signature span').innerHTML = ui.format.date(data.project.signatureDate);
|
||||
this.find('.project-funding-type span').innerHTML = app.meta.getItem('icmp-fundings', data.project.fundingType).label;
|
||||
|
||||
let active = 'info';
|
||||
|
||||
let wf = {
|
||||
entities: [
|
||||
{
|
||||
title: 'summary',
|
||||
subtitle: '',
|
||||
severity: 'primary',
|
||||
data: {
|
||||
id: 'info',
|
||||
type: 'info'
|
||||
}
|
||||
}
|
||||
],
|
||||
relations: [ ]
|
||||
}
|
||||
|
||||
let i = 0;
|
||||
for(let phase of data.phases) {
|
||||
// to be upgraded
|
||||
if(phase.type != 'kyc' && phase.type != 'equityAgreement') {
|
||||
|
||||
wf.entities.push({
|
||||
title: 'Tech DD',
|
||||
subtitle: app.meta.getItem('icmp-techdd-status', phase.statusHistory[0].value).label,
|
||||
severity: phase.active ? 'accent': 'primary',
|
||||
data: {
|
||||
id: phase.type + i,
|
||||
type: 'techdd'
|
||||
}
|
||||
})
|
||||
wf.relations.push({source: 'info', target: phase.type + i})
|
||||
if(phase.active) active = phase.type;
|
||||
i++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.setupWorkflow(wf);
|
||||
this.onProjectNodeSelect({
|
||||
options: {
|
||||
data: {
|
||||
type: active
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setupWorkflow(data) { this.nav.data = data; }
|
||||
|
||||
loadPart(part) {
|
||||
|
||||
let contentPath = 'projects/icmp/project/';
|
||||
|
||||
if(this.currentPart) {
|
||||
if(this.currentPart.ref == part) return;
|
||||
this.currentPart.DOMContentRemoved();
|
||||
this.currentPart = null;
|
||||
}
|
||||
|
||||
this.find('.content').innerHTML = '';
|
||||
|
||||
switch(part) {
|
||||
case 'info':
|
||||
this.loadContent( contentPath + 'ProjectFundingInfoView', {}, { models: { project: this.project} } )
|
||||
.then( view => this.appendContent(part, view))
|
||||
break;
|
||||
case 'techdd':
|
||||
|
||||
ui.lock();
|
||||
|
||||
app.User.getBusinessPermissions([ `/icmp/projects/${this.number}/${this.node}/${this.nodeId}` ])
|
||||
.then(async payload => {
|
||||
|
||||
ui.unlock();
|
||||
|
||||
if(payload[`/icmp/projects/${this.number}/${this.node}/${this.nodeId}`].permissions.length > 0) {
|
||||
this.loadContent(
|
||||
contentPath + 'ProjectFundingTechDDView',
|
||||
{},
|
||||
{
|
||||
projectNumber: this.number,
|
||||
nodeType: this.node,
|
||||
nodeId: this.nodeId,
|
||||
mode: 'edit',
|
||||
models: {
|
||||
project: this.project,
|
||||
techdd: new ICMPProjectNodeModel(payload[`/icmp/projects/${this.number}/${this.node}/${this.nodeId}`].permissions)
|
||||
}
|
||||
})
|
||||
.then( view => this.appendContent(part, view));
|
||||
} else {
|
||||
ui.growl.append('You don\'t have access to this resource', 'danger' );
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
break;
|
||||
case 'progressmeeting':
|
||||
|
||||
ui.lock();
|
||||
|
||||
app.User.getBusinessPermissions([ `/icmp/projects/${this.number}/${this.node}/${this.nodeId}` ])
|
||||
.then(async payload => {
|
||||
|
||||
ui.unlock();
|
||||
|
||||
if(payload[`/icmp/projects/${this.number}/${this.node}/${this.nodeId}`].permissions.length > 0) {
|
||||
this.loadContent(
|
||||
contentPath + 'ProjectProgressMeetingView',
|
||||
{},
|
||||
{
|
||||
projectNumber: this.number,
|
||||
nodeType: this.node,
|
||||
nodeId: this.nodeId,
|
||||
mode: 'edit',
|
||||
models: {
|
||||
project: this.project,
|
||||
techdd: new ICMPProjectNodeModel(payload[`/icmp/projects/${this.number}/${this.node}/${this.nodeId}`].permissions)
|
||||
}
|
||||
})
|
||||
.then( view => this.appendContent(part, view));
|
||||
} else {
|
||||
ui.growl.append('You don\'t have access to this resource', 'danger' );
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
break;
|
||||
case 'docs':
|
||||
this.loadContent( contentPath + 'ProjectFundingDocumentsView', {}, { models: { project: this.project} } )
|
||||
.then( view => this.appendContent(part, view))
|
||||
break;
|
||||
case 'history':
|
||||
this.loadContent( contentPath + 'ProjectFundingHistoryView', {}, { models: { project: this.project} } )
|
||||
.then( view => this.appendContent(part, view))
|
||||
break;
|
||||
case 'team':
|
||||
this.loadContent( contentPath + 'ProjectFundingTeamView', {}, { models: { project: this.project} } )
|
||||
.then( view => this.appendContent(part, view))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
appendContent(name, view) {
|
||||
this.currentPart = view;
|
||||
this.currentPart.ref = name;
|
||||
this.find(`.content`).append(view.el);
|
||||
}
|
||||
|
||||
onAggregationSelect(event) {
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
|
||||
this.loadPart(event.currentTarget.dataset.target);
|
||||
}
|
||||
|
||||
onProjectNodeSelect(node) {
|
||||
this.loadPart(node.options.data.type);
|
||||
}
|
||||
|
||||
onProjectNodeUpdate(event) {
|
||||
this.currentPart.ref = '';
|
||||
this.loadPart('techdd');
|
||||
}
|
||||
}
|
||||
|
||||
app.registerClass('ProjectFundingProjectView',ProjectFundingProjectView);
|
||||
@@ -0,0 +1,9 @@
|
||||
<article eiccard class="journal">
|
||||
<header>
|
||||
<h1>Documents available for this project</h1>
|
||||
<h2></h2>
|
||||
</header>
|
||||
<section>
|
||||
|
||||
</section>
|
||||
</article>
|
||||
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
*/
|
||||
|
||||
class ProjectFundingDocumentsView extends EICDomContent {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
|
||||
for(let model in options.models) this[model] = options.models[model];
|
||||
|
||||
this.components = ui.eicfy(this.el);
|
||||
|
||||
this.project.documents(this.project.current.project.number)
|
||||
.then(this.fill.bind(this))
|
||||
}
|
||||
|
||||
fill(data) {
|
||||
let content = this.find('section');
|
||||
for(let section of data) {
|
||||
content.append(ui.create(`<label large><b>${section.category}</b></label>`));
|
||||
let files = ui.create(`<ul bulleted small>`)
|
||||
content.append(files);
|
||||
for(let file of section.attachments) {
|
||||
let url = app.config.api['/files'].get.uri
|
||||
url = url.replace('{id}', file.id)
|
||||
files.append(ui.create(`<li><a href="${url}" noroute target="_blank">${file.label}</a></li>`));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
app.registerClass('ProjectFundingDocumentsView',ProjectFundingDocumentsView);
|
||||
@@ -0,0 +1,9 @@
|
||||
<article eiccard class="history">
|
||||
<header>
|
||||
<h1>Project history</h1>
|
||||
<h2>Key events of the project life cycle</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div eicdatagrid></div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
*/
|
||||
|
||||
class ProjectFundingHistoryView extends EICDomContent {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
this.components = ui.eicfy(this.el);
|
||||
|
||||
for(let model in options.models) this[model] = options.models[model];
|
||||
|
||||
this.list = new DataGrid(this.find('[eicdatagrid]'), {
|
||||
headers: [
|
||||
{label: 'date', type: 'dateTime'},
|
||||
{label: 'action'}
|
||||
],
|
||||
height: '45vh'
|
||||
})
|
||||
|
||||
this.fill(this.project.current.project.statusHistory);
|
||||
}
|
||||
|
||||
fill(data) {
|
||||
this.list.clear();
|
||||
|
||||
for(let item of data) {
|
||||
this.list.addRow(0, [ item.dateTime, item.value ]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
app.registerClass('ProjectFundingHistoryView',ProjectFundingHistoryView);
|
||||
@@ -0,0 +1,53 @@
|
||||
<article eiccard class="history">
|
||||
<header>
|
||||
<h1>Summary</h1>
|
||||
<h2></h2>
|
||||
</header>
|
||||
<section>
|
||||
<p class="project-abstract"></p>
|
||||
<div class="project-keywords">
|
||||
<label xsmall><b>Keywords</b></label>
|
||||
<span></span>
|
||||
</div>
|
||||
<div class="project-extra-keywords">
|
||||
<label xsmall><b>Extra keywords</b></label>
|
||||
<span></span>
|
||||
</div>
|
||||
<hr/>
|
||||
<label xlarge><b>Fundings information</b></label>
|
||||
<div class="project-grant">
|
||||
<label large><b>Grant funding</b></label>
|
||||
<div class="cols-3">
|
||||
<div class="project-grant-requested">
|
||||
<label xsmall>Requested amount (by Beneficiary)</label>
|
||||
<span></span>
|
||||
</div>
|
||||
<div class="project-grant-proposed">
|
||||
<label xsmall>Recommended amount (by Interview panel)</label>
|
||||
<span></span>
|
||||
</div>
|
||||
<div class="project-grant-final">
|
||||
<label xsmall>Final amount</label>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="project-equity">
|
||||
<label large><b>Equity funding</b></label>
|
||||
<div class="cols-3">
|
||||
<div class="project-equity-requested">
|
||||
<label xsmall>Requested amount (by Beneficiary)</label>
|
||||
<span></span>
|
||||
</div>
|
||||
<div class="project-equity-proposed">
|
||||
<label xsmall>Recommended amount (by Interview panel)</label>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="project-documents">
|
||||
<hr/>
|
||||
<label xlarge><b>Documents</b></label>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ProjectFundingInfoView extends EICDomContent {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
this.components = ui.eicfy(this.el);
|
||||
for(let model in options.models) this[model] = options.models[model];
|
||||
this.fill(this.project.current)
|
||||
}
|
||||
|
||||
fill(data) {
|
||||
this.find('.project-abstract').innerHTML = data.project.abstract;
|
||||
this.find('.project-keywords span').innerHTML = data.project.keywords.eicKeywords.join(', ');
|
||||
this.find('.project-extra-keywords span').innerHTML = data.project.keywords.freeKeywords.join(', ');
|
||||
|
||||
if(data.project.financingDetails.grant) {
|
||||
this.find('.project-grant-requested span').innerHTML = ui.format.currency(data.project.financingDetails.grant.requestedAmount);
|
||||
this.find('.project-grant-proposed span').innerHTML = ui.format.currency(data.project.financingDetails.grant.proposedAmount);
|
||||
this.find('.project-grant-final span').innerHTML = ui.format.currency(data.project.financingDetails.grant.finalAmount);
|
||||
|
||||
} else {
|
||||
ui.hide(this.find('.project-grant'))
|
||||
}
|
||||
|
||||
if(data.project.financingDetails.equity) {
|
||||
this.find('.project-equity-requested span').innerHTML = ui.format.currency(data.project.financingDetails.equity.requestedAmount);
|
||||
this.find('.project-equity-proposed span').innerHTML = ui.format.currency(data.project.financingDetails.equity.proposedAmount);
|
||||
|
||||
} else {
|
||||
ui.hide(this.find('.project-equity'))
|
||||
|
||||
}
|
||||
|
||||
if(data.project.documents) {
|
||||
let content = this.find('.project-documents');
|
||||
for(let section of data.project.documents) {
|
||||
content.append(ui.create(`<label large><b>${section.category}</b></label>`));
|
||||
let files = ui.create(`<ul bulleted small>`)
|
||||
content.append(files);
|
||||
for(let file of section.attachments) {
|
||||
let url = app.config.api['/files'].get.uri
|
||||
url = url.replace('{id}', file.id)
|
||||
files.append(ui.create(`<li><a href="${url}" noroute target="_blank">${file.label}</a></li>`));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ui.hide(this.find('.project-documents'))
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
app.registerClass('ProjectFundingInfoView',ProjectFundingInfoView);
|
||||
@@ -0,0 +1,47 @@
|
||||
<article eiccard class="funding-node progress-meeting">
|
||||
<header>
|
||||
<h1>Progress Meeting</h1>
|
||||
<h2><span eicchip warning>feedback</span></h2>
|
||||
</header>
|
||||
<section>
|
||||
<div class="cols-2 right">
|
||||
<div>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>Schedule</h1>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Date</label>
|
||||
<span>6 Feb 2024 | 10:00 - 22:00</span>
|
||||
</div>
|
||||
<div>
|
||||
<label>Location</label>
|
||||
<span>skype</span>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>Participants</h1>
|
||||
</header>
|
||||
<section>
|
||||
<label>Attending</label>
|
||||
<ul></ul>
|
||||
<label>Excused</label>
|
||||
<ul></ul>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
<article eiccard class="feedback-form">
|
||||
<header>
|
||||
<h1>Feedback</h1>
|
||||
<h2></h2>
|
||||
</header>
|
||||
<section>
|
||||
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -0,0 +1,10 @@
|
||||
class ProjectFundingProgressMeetingView extends EICDomContent {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
|
||||
}
|
||||
|
||||
fill() {}
|
||||
|
||||
refresh(data) {}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<style>
|
||||
.contributors .list {
|
||||
display: flex;
|
||||
flex-flow: wrap;
|
||||
grid-gap: 20px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
</style>
|
||||
<article eiccard class="contributors">
|
||||
<header>
|
||||
<h1>Contributors</h1>
|
||||
<h2>People involved in the project</h2>
|
||||
</header>
|
||||
<section>
|
||||
<ul nonbulleted class="list"></ul>
|
||||
</section>
|
||||
</article>
|
||||
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
*/
|
||||
|
||||
class ProjectFundingTeamView extends EICDomContent {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
|
||||
for(let model in options.models) this[model] = options.models[model];
|
||||
|
||||
this.components = ui.eicfy(this.el);
|
||||
|
||||
this.project.contributors(this.project.current.project.number)
|
||||
.then(this.fill.bind(this))
|
||||
}
|
||||
|
||||
fill(data) {
|
||||
let list = this.find('ul.list');
|
||||
|
||||
for(let member of data) {
|
||||
let roles = member.roles.map(o => this.translateRole(o.role))
|
||||
let el = ui.create(`<li>
|
||||
<div medium><b>${member.information.name.firstName} ${member.information.name.lastName}</b></div>
|
||||
<div xsmall><a href="mailto:${member.information.contacts.email}">${member.information.contacts.email}</a></div>
|
||||
<div small>${roles.join(' | ')}</div>
|
||||
</li>`);
|
||||
|
||||
list.append(el)
|
||||
}
|
||||
}
|
||||
|
||||
translateRole(role) {
|
||||
let s = role.replace('PROJECT_', '');
|
||||
|
||||
switch(s) {
|
||||
case 'TechDDExpert':
|
||||
s = 'TechDD Expert';
|
||||
break;
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
app.registerClass('ProjectFundingTeamView',ProjectFundingTeamView);
|
||||
@@ -0,0 +1,29 @@
|
||||
<style>
|
||||
.funding-node.tech-dd textarea { height: 120px; }
|
||||
.funding-node.tech-dd .tabs-extended { min-width: 240px; }
|
||||
</style>
|
||||
<article eiccard class="funding-node tech-dd">
|
||||
<header class="cols-2 right">
|
||||
<div>
|
||||
<h1>Technical Due Diligence</h1>
|
||||
<h2></h2>
|
||||
</div>
|
||||
<div class="version"></div>
|
||||
</header>
|
||||
<section>
|
||||
<div class="files"></div>
|
||||
<div class="form"></div>
|
||||
|
||||
</section>
|
||||
<footer>
|
||||
<div class="cols-2 right">
|
||||
<div>
|
||||
<div class="autosave-control">
|
||||
<input eicinput type="toggler" labelleft="Enable auto-save" name="autosave" data-typ="ignore" truevalue="true" falsevalue="false" value="true" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="actions"></div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</article>
|
||||
@@ -0,0 +1,625 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ProjectFundingTechDDView extends EICDomContent {
|
||||
|
||||
_autoSave = null;
|
||||
|
||||
// save every 10s
|
||||
_autoSaveDelay = 10000;
|
||||
// validate every 2s
|
||||
_autoValidateDelay = 2000;
|
||||
// state flag avoiding saving form currently beeing loaded
|
||||
_busy = false;
|
||||
|
||||
get autoSave() { return this._autoSave != null; }
|
||||
set autoSave(value) {
|
||||
if(value) {
|
||||
if(!this._autoSave) {
|
||||
this._autoSave = setInterval(this.onAutoSave.bind(this), this._autoSaveDelay)
|
||||
}
|
||||
} else {
|
||||
clearInterval(this._autoSave);
|
||||
this._autoSave = null;
|
||||
}
|
||||
}
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
this.components = ui.eicfy(this.el);
|
||||
this.projectNumber = options.projectNumber
|
||||
this.nodeId = options.nodeId;
|
||||
this.nodeType = 'techdd';
|
||||
this.mode = options.mode;
|
||||
for(let model in options.models) this[model] = options.models[model];
|
||||
|
||||
this.container = this.components.find(o => o.el.classList.contains('funding-node'))
|
||||
this.container.loading = true;
|
||||
|
||||
this._busy = true;
|
||||
this.techdd.get(this.projectNumber,this.nodeType, this.nodeId)
|
||||
.then(this.fill.bind(this))
|
||||
}
|
||||
|
||||
DOMContentBlured() {
|
||||
|
||||
if(this.autoSave) { this.autoSave = false; }
|
||||
|
||||
if(this.validationCheck) {
|
||||
clearInterval(this.validationCheck);
|
||||
this.validationCheck = null;
|
||||
}
|
||||
}
|
||||
|
||||
DOMContentRemoved() {
|
||||
if(this.autoSave) {
|
||||
this.autoSave = false;
|
||||
if((this.mode == 'edit')) this.save();
|
||||
};
|
||||
|
||||
if(this.validationCheck) {
|
||||
clearInterval(this.validationCheck);
|
||||
this.validationCheck = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DOMContentFocused() {
|
||||
if(this.mode == 'edit') {
|
||||
if(this.saveToggler && this.saveToggler.value == 'true') { this.autoSave = true }
|
||||
if(!this.validationCheck) {
|
||||
this.validationCheck = setInterval(this.validateForm.bind(this), this._autoValidateDelay);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setupFormActions() {
|
||||
|
||||
let saveControl = this.find('.autosave-control');
|
||||
this.availableActions = [];
|
||||
this.reviewActions = [];
|
||||
|
||||
ui.hide(saveControl);
|
||||
|
||||
if(this.techdd.hasPrivilege('read')) {
|
||||
this.mode = 'read'
|
||||
}
|
||||
|
||||
if(this.techdd.hasPrivilege('update')) {
|
||||
this.mode = 'edit';
|
||||
|
||||
ui.show(saveControl);
|
||||
|
||||
|
||||
this.availableActions.push({
|
||||
id: 'cancel',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'secondary',
|
||||
onclick: this.cancel.bind(this),
|
||||
label: 'discard changes'
|
||||
})
|
||||
})
|
||||
|
||||
this.availableActions.push({
|
||||
id: 'save',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'primary',
|
||||
onclick: this.save.bind(this),
|
||||
label: 'save' })
|
||||
})
|
||||
|
||||
this.autosave = true
|
||||
this.saveToggler.onToggle("true", this.saveToggler);
|
||||
}
|
||||
|
||||
if(this.techdd.hasPrivilege('submit')) {
|
||||
this.availableActions.push({
|
||||
id: 'submit',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'primary',
|
||||
onclick: this.submit.bind(this),
|
||||
label: 'submit' })
|
||||
})
|
||||
}
|
||||
|
||||
if(this.techdd.hasPrivilege('reject')) {
|
||||
this.mode = 'review';
|
||||
|
||||
this.availableActions.push({
|
||||
id: 'reject',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'primary',
|
||||
onclick: this.reject.bind(this),
|
||||
label: 'Reopen' })
|
||||
})
|
||||
|
||||
this.reviewActions.push({
|
||||
id: 'cancelReview',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'secondary',
|
||||
onclick: this.cancelReview.bind(this),
|
||||
label: 'cancel' })
|
||||
})
|
||||
|
||||
this.reviewActions.push({
|
||||
id: 'commitReview',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'primary',
|
||||
onclick: this.commitReview.bind(this),
|
||||
label: 'send remarks' })
|
||||
})
|
||||
}
|
||||
|
||||
if(this.techdd.hasPrivilege('sendforreview')) {
|
||||
this.mode = 'review';
|
||||
|
||||
this.availableActions.push({
|
||||
id: 'review',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'primary',
|
||||
onclick: this.review.bind(this),
|
||||
label: 'send for consultation' })
|
||||
})
|
||||
}
|
||||
|
||||
if(this.techdd.hasPrivilege('validate')) {
|
||||
this.mode = 'review';
|
||||
|
||||
this.availableActions.push({
|
||||
id: 'validate',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'success',
|
||||
onclick: this.validate.bind(this),
|
||||
label: 'validate' })
|
||||
})
|
||||
}
|
||||
|
||||
if(this.techdd.hasPrivilege('cancel')) {
|
||||
this.mode = 'review';
|
||||
|
||||
this.availableActions.push({
|
||||
id: 'abort',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'danger',
|
||||
onclick: this.abort.bind(this),
|
||||
label: 'abort' })
|
||||
})
|
||||
}
|
||||
|
||||
if(this.techdd.hasPrivilege('review')) {
|
||||
this.mode = 'review';
|
||||
|
||||
this.availableActions.push({
|
||||
id: 'reject',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'primary',
|
||||
onclick: this.reject.bind(this),
|
||||
label: 'add remarks' })
|
||||
})
|
||||
|
||||
this.availableActions.push({
|
||||
id: 'approve',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'success',
|
||||
onclick: this.approve.bind(this),
|
||||
label: 'approve' })
|
||||
})
|
||||
|
||||
this.reviewActions.push({
|
||||
id: 'cancelReview',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'secondary',
|
||||
onclick: this.cancelReview.bind(this),
|
||||
label: 'cancel' })
|
||||
})
|
||||
|
||||
this.reviewActions.push({
|
||||
id: 'commitReview',
|
||||
ctrl: new Button(null, {
|
||||
severity: 'primary',
|
||||
onclick: this.commitConsult.bind(this),
|
||||
label: 'send remarks' })
|
||||
})
|
||||
}
|
||||
|
||||
let container = this.find('footer .actions');
|
||||
container.innerHTML = '';
|
||||
for(let action of this.availableActions) { container.append(action.ctrl.el) }
|
||||
}
|
||||
|
||||
|
||||
fill(data) {
|
||||
|
||||
|
||||
let path = 'projects/icmp/project/forms/'
|
||||
let view = 'ICMPFormTechddV1View';
|
||||
let versionLabel = 'regular report'
|
||||
|
||||
switch(data.form.version) {
|
||||
case 'techdd-report-v1-full':
|
||||
view = 'ICMPFormTechddV1FullView';
|
||||
versionLabel = 'full report'
|
||||
break;
|
||||
case 'techdd-report-v1-enhanced':
|
||||
view = 'ICMPFormTechddV1EnhancedView'
|
||||
versionLabel = 'enhanced report'
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
let tags = [];
|
||||
this.find('header .version').innerHTML = `<span eicchip primary>${versionLabel}</span>`
|
||||
|
||||
if(data.experts.length > 0) {
|
||||
tags.push(`<span eicchip info>reporting assigned to ${data.experts[0].information.name.firstName} ${data.experts[0].information.name.lastName}</span>`)
|
||||
}
|
||||
tags.push(`<span eicchip accent>${app.meta.getItem('icmp-techdd-status', data.statusHistory[0].value).label}</span>`)
|
||||
|
||||
this.find('header h2').innerHTML = tags.join('');
|
||||
|
||||
this.originalForm = JSON.parse(JSON.stringify(data))
|
||||
|
||||
this.loadContent(path + view, {})
|
||||
.then(view => {
|
||||
this.find('.form').append(view.el)
|
||||
view.fill(data);
|
||||
this.formView = view;
|
||||
this.form = view.form;
|
||||
this.formComponents = view.components;
|
||||
this.setupForm(data)
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
}
|
||||
|
||||
setupForm(data) {
|
||||
this.saveToggler = this.components.find(o => o.el.name == 'autosave');
|
||||
this.saveToggler.onToggle = this.onAutoSaveToggle.bind(this)
|
||||
this.setupFormActions();
|
||||
switch(this.mode) {
|
||||
case 'read':
|
||||
this.enableEditing(false);
|
||||
this.enableReviewing(false);
|
||||
break;
|
||||
case 'edit':
|
||||
this.enableEditing(true);
|
||||
this.enableReviewing(false);
|
||||
if(!this.validationCheck) {
|
||||
this.validationCheck = setInterval(this.validateForm.bind(this), this._autoValidateDelay);
|
||||
}
|
||||
break;
|
||||
case 'review':
|
||||
this.enableEditing(false);
|
||||
this.enableReviewing(false);
|
||||
break;
|
||||
}
|
||||
|
||||
let comments = this.findAll('[data-path^="comments."]')
|
||||
for(let comment of comments) {
|
||||
let chunks = comment.dataset.path.split('.')
|
||||
if(chunks.length > 2 && comment.value != '') {
|
||||
let trigger = this.find(`li[data-target=${chunks[2]}]`)
|
||||
if(trigger) trigger.setAttribute('warning', '')
|
||||
}
|
||||
}
|
||||
|
||||
if(data.documents && data.documents.length > 0) {
|
||||
for(let document of data.documents[0].attachments) {
|
||||
let url = app.config.api['/files'].get.uri
|
||||
url = url.replace('{id}', document.id)
|
||||
let alert = ui.create(`<div eicalert info><a href="${url}" noroute target="_blank">Download report as PDF</a></div>`)
|
||||
this.find('.files').append(alert);
|
||||
}
|
||||
}
|
||||
|
||||
this.container.loading = false;
|
||||
this._busy = false;
|
||||
}
|
||||
|
||||
enableEditing(value) {
|
||||
let fields = this.form.scan(true);
|
||||
for(let field of fields) {
|
||||
let component = this.form.element2component(this.formComponents, field.el.name, field.el.dataset.path)
|
||||
if(component && component.el && component.el.dataset.path.search('form') == 0) {
|
||||
if(value) {
|
||||
component.el.dataset.type = component.el.nodeName == 'SELECT' ? 'boolean': 'text'
|
||||
component.disabled = false;
|
||||
} else {
|
||||
component.el.dataset.type = 'ignore'
|
||||
component.disabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enableReviewing(value) {
|
||||
|
||||
let fields = this.form.scan(true);
|
||||
|
||||
this.originalComments = [];
|
||||
|
||||
for(let field of fields) {
|
||||
let component = this.form.element2component(this.formComponents, field.el.name, field.el.dataset.path)
|
||||
if(component && component.el.dataset.path.search('comment') == 0) {
|
||||
if(value) {
|
||||
this.originalComments.push({
|
||||
component: component,
|
||||
value: component.value
|
||||
})
|
||||
component.el.dataset.type = 'text'
|
||||
component.disabled = false
|
||||
component.show()
|
||||
} else {
|
||||
component.el.dataset.type = 'ignore'
|
||||
component.disabled = true
|
||||
component.hide()
|
||||
let alerts = component.el.parentElement.querySelectorAll('[eicalert]');
|
||||
for(let alert of alerts) {
|
||||
alert.remove();
|
||||
}
|
||||
if(component.value != '') {
|
||||
component.el.parentElement.append((new Alert(null, {message: component.value,severity: 'warning'})).el)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
validateForm() {
|
||||
//let valid = true;
|
||||
let valid = this.form.validate();
|
||||
|
||||
// init tab badges
|
||||
//let triggers = [].concat( this.formView.tabTech.triggers, this.formView.tabMarket.triggers )
|
||||
console.log(this.formView.getTriggers())
|
||||
let triggers = this.formView.getTriggers();
|
||||
for(let trigger of triggers) {
|
||||
let badge = new Badge(trigger.querySelector('[eicbadge]'))
|
||||
badge.value = ''
|
||||
}
|
||||
|
||||
// mark tabs on error
|
||||
if(!valid) {
|
||||
let errors = this.findAll('.validation-failed textarea, .validation-failed select')
|
||||
|
||||
for(let error of errors) {
|
||||
let path = error.dataset.path.split('.')
|
||||
let trigger = triggers.find(el => el.dataset.target == path[2]);
|
||||
// todo make it count
|
||||
if(trigger) {
|
||||
let badge = new Badge(trigger.querySelector('[eicbadge]'))
|
||||
badge.value = parseInt(badge.value || 0) + 1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**/
|
||||
return valid;
|
||||
}
|
||||
|
||||
autoValidate() { this.validateForm(); }
|
||||
|
||||
reject() {
|
||||
let container = this.find('footer .actions');
|
||||
container.innerHTML = '';
|
||||
|
||||
for(let action of this.reviewActions) container.append(action.ctrl.el)
|
||||
|
||||
this.enableReviewing(true);
|
||||
}
|
||||
|
||||
cancelReview() {
|
||||
|
||||
let container = this.find('footer .actions');
|
||||
container.innerHTML = '';
|
||||
|
||||
for(let comment of this.originalComments) {
|
||||
comment.component.value = comment.value;
|
||||
}
|
||||
for(let action of this.availableActions) container.append(action.ctrl.el)
|
||||
|
||||
this.enableReviewing(false);
|
||||
}
|
||||
|
||||
commitReview() {
|
||||
for(let action of this.reviewActions) action.ctrl.disabled = true;
|
||||
this.reviewActions.find(o => o.id == 'commitReview').ctrl.loading = true;
|
||||
|
||||
let payload = this.form.value;
|
||||
this.techdd.comment('rejecting', this.projectNumber, this.nodeType, this.nodeId, payload)
|
||||
.then( () => {
|
||||
for(let action of this.reviewActions) action.ctrl.disabled = false;
|
||||
this.reviewActions.find(o => o.id == 'commitReview').ctrl.loading = false;
|
||||
this.reviewActions.find(o => o.id == 'commitReview').ctrl.disabled = this.autoSave;
|
||||
app.events.trigger('project_node_updated', {node: this.nodeType, nodeId: this.nodeId});
|
||||
},
|
||||
() => {
|
||||
for(let action of this.reviewActions) action.ctrl.disabled = false;
|
||||
this.reviewActions.find(o => o.id == 'commitReview').ctrl.loading = false;
|
||||
this.reviewActions.find(o => o.id == 'commitReview').ctrl.disabled = this.autoSave;
|
||||
})
|
||||
}
|
||||
|
||||
approve() {
|
||||
for(let action of this.availableActions) action.ctrl.disabled = true;
|
||||
this.availableActions.find(o => o.id == 'approve').ctrl.loading = true;
|
||||
|
||||
let payload = this.form.value;
|
||||
payload.comments = {};
|
||||
this.techdd.comment('reviewing', this.projectNumber, this.nodeType, this.nodeId, payload)
|
||||
.then( () => {
|
||||
for(let action of this.availableActions) action.ctrl.disabled = false;
|
||||
this.availableActions.find(o => o.id == 'approve').ctrl.loading = false;
|
||||
app.events.trigger('project_node_updated', {node: this.nodeType, nodeId: this.nodeId});
|
||||
},
|
||||
() => {
|
||||
for(let action of this.availableActions) action.ctrl.disabled = false;
|
||||
this.availableActions.find(o => o.id == 'approve').ctrl.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
commitConsult() {
|
||||
for(let action of this.reviewActions) action.ctrl.disabled = true;
|
||||
this.reviewActions.find(o => o.id == 'commitReview').ctrl.loading = true;
|
||||
|
||||
let payload = this.form.value;
|
||||
this.techdd.comment('reviewing', this.projectNumber, this.nodeType, this.nodeId, payload)
|
||||
.then( () => {
|
||||
for(let action of this.reviewActions) action.ctrl.disabled = false;
|
||||
this.reviewActions.find(o => o.id == 'commitReview').ctrl.loading = false;
|
||||
app.events.trigger('project_node_updated', {node: this.nodeType, nodeId: this.nodeId});
|
||||
},
|
||||
() => {
|
||||
for(let action of this.reviewActions) action.ctrl.disabled = false;
|
||||
this.reviewActions.find(o => o.id == 'commitReview').ctrl.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
save() {
|
||||
|
||||
if(!app.User.isAuthenticated || this._busy) return;
|
||||
|
||||
this.validateForm()
|
||||
|
||||
for(let action of this.availableActions) action.ctrl.disabled = true;
|
||||
this.availableActions.find(o => o.id == 'save').ctrl.loading = true;
|
||||
|
||||
let payload = this.form.value;
|
||||
this.techdd.process('saving', this.projectNumber, this.nodeType, this.nodeId, payload)
|
||||
.then( payload => {
|
||||
for(let action of this.availableActions) action.ctrl.disabled = false;
|
||||
this.availableActions.find(o => o.id == 'save').ctrl.loading = false;
|
||||
this.availableActions.find(o => o.id == 'save').ctrl.disabled = this.autoSave;
|
||||
this.availableActions.find(o => o.id == 'cancel').ctrl.disabled = this.autoSave;
|
||||
this.originalForm.form = payload.form;
|
||||
},
|
||||
() => {
|
||||
for(let action of this.availableActions) action.ctrl.disabled = false;
|
||||
this.availableActions.find(o => o.id == 'save').ctrl.loading = false;
|
||||
this.availableActions.find(o => o.id == 'save').ctrl.disabled = this.autoSave;
|
||||
this.availableActions.find(o => o.id == 'cancel').ctrl.disabled = this.autoSave;
|
||||
})
|
||||
}
|
||||
|
||||
submit() {
|
||||
for(let action of this.availableActions) action.ctrl.disabled = true;
|
||||
this.availableActions.find(o => o.id == 'submit').ctrl.loading = true;
|
||||
|
||||
if(this.validateForm()) {
|
||||
let payload = this.form.value;
|
||||
this.autoSave = false;
|
||||
this.techdd.process('submitting', this.projectNumber, this.nodeType, this.nodeId, payload)
|
||||
.then( () => {
|
||||
for(let action of this.availableActions) action.ctrl.disabled = false;
|
||||
this.availableActions.find(o => o.id == 'submit').ctrl.loading = false;
|
||||
app.events.trigger('project_node_updated', {node: this.nodeType, nodeId: this.nodeId});
|
||||
},
|
||||
() => {
|
||||
for(let action of this.availableActions) action.ctrl.disabled = false;
|
||||
this.availableActions.find(o => o.id == 'submit').ctrl.loading = false;
|
||||
})
|
||||
} else {
|
||||
for(let action of this.availableActions) action.ctrl.disabled = false;
|
||||
this.availableActions.find(o => o.id == 'submit').ctrl.loading = false;
|
||||
ui.growl.append('The form still contains issues', 'danger')
|
||||
}
|
||||
}
|
||||
|
||||
cancel() {
|
||||
this.form.fill(this.components,this.originalForm)
|
||||
}
|
||||
|
||||
async abort() {
|
||||
let success = await this.openDialog(
|
||||
await this.loadContent(
|
||||
'projects/icmp/project/dialogs/ICMPNodeActionConfirmDialog',
|
||||
{
|
||||
title: 'Dismiss expert and report',
|
||||
subtitle: 'You are about to dismiss this report. Another expert will be assigned to this task.'
|
||||
},
|
||||
{
|
||||
models: {
|
||||
node: this.techdd
|
||||
},
|
||||
number: this.projectNumber,
|
||||
type: this.nodeType,
|
||||
nodeId: this.nodeId,
|
||||
report: this.form.value,
|
||||
action: 'aborting'
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
if(success) {
|
||||
app.events.trigger('project_node_updated', {node: this.nodeType, nodeId: this.nodeId});
|
||||
}
|
||||
}
|
||||
|
||||
async validate() {
|
||||
let success = await this.openDialog(
|
||||
await this.loadContent(
|
||||
'projects/icmp/project/dialogs/ICMPNodeActionConfirmDialog',
|
||||
{
|
||||
title: 'Validate this report',
|
||||
subtitle: 'You are about to approve this report and complete Technical Due Diligence'
|
||||
},
|
||||
{
|
||||
models: {
|
||||
node: this.techdd
|
||||
},
|
||||
number: this.projectNumber,
|
||||
type: this.nodeType,
|
||||
nodeId: this.nodeId,
|
||||
report: this.form.value,
|
||||
action: 'validating'
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
if(success) {
|
||||
app.events.trigger('project_node_updated', {node: this.nodeType, nodeId: this.nodeId});
|
||||
}
|
||||
}
|
||||
|
||||
async review() {
|
||||
let success = await this.openDialog(
|
||||
await this.loadContent(
|
||||
'projects/icmp/project/dialogs/ICMPNodeActionConfirmDialog',
|
||||
{ title: 'Send this report for reviewing' },
|
||||
{
|
||||
models: {
|
||||
node: this.techdd
|
||||
},
|
||||
number: this.projectNumber,
|
||||
type: this.nodeType,
|
||||
nodeId: this.nodeId,
|
||||
report: this.form.value,
|
||||
action: 'reviewing'
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
if(success) {
|
||||
app.events.trigger('project_node_updated', {node: this.nodeType, nodeId: this.nodeId});
|
||||
}
|
||||
}
|
||||
|
||||
onAutoSaveToggle(value, toggler) {
|
||||
if(value == 'true') {
|
||||
toggler.severity = 'primary'
|
||||
this.autoSave = true;
|
||||
} else {
|
||||
toggler.severity = 'secondary'
|
||||
this.autoSave = false;
|
||||
}
|
||||
this.availableActions.find(o => o.id == 'save').ctrl.disabled = this.autoSave;
|
||||
this.availableActions.find(o => o.id == 'cancel').ctrl.disabled = this.autoSave;
|
||||
}
|
||||
|
||||
onAutoSave() { this.save(); }
|
||||
}
|
||||
|
||||
app.registerClass('ProjectFundingTechDDView',ProjectFundingTechDDView);
|
||||
@@ -0,0 +1,10 @@
|
||||
<style>
|
||||
.project-node-process-confirm {
|
||||
min-width: 40vw;
|
||||
min-height: 40vh;
|
||||
}
|
||||
.project-node-process-confirm textarea { height:320px; }
|
||||
</style>
|
||||
<div class="project-node-process-confirm">
|
||||
<textarea eictextarea name="justification" placeholder="Comments about this action" class="required"></textarea>
|
||||
</div>
|
||||
@@ -0,0 +1,47 @@
|
||||
class ICMPNodeActionConfirmDialog extends EICDialogContent {
|
||||
actions = [
|
||||
{
|
||||
label: 'cancel',
|
||||
onclick: this.cancel.bind(this),
|
||||
severity: 'secondary',
|
||||
role: 'cancel'
|
||||
},
|
||||
{
|
||||
label: 'proceed',
|
||||
onclick: this.process.bind(this),
|
||||
severity: 'primary',
|
||||
role: 'process'
|
||||
}
|
||||
]
|
||||
|
||||
async DOMContentLoaded(options) {
|
||||
this.node = options.models.node;
|
||||
this.action = options.action
|
||||
this.number = options.number
|
||||
this.type = options.type
|
||||
this.nodeId = options.nodeId
|
||||
this.report = options.report
|
||||
console.log(options)
|
||||
console.log(this)
|
||||
}
|
||||
|
||||
DOMContentFocused() {
|
||||
ui.eicfy(this.el);
|
||||
this.form = new Form(this.el);
|
||||
}
|
||||
|
||||
process() {
|
||||
let payload = {
|
||||
status: this.action,
|
||||
form: this.report
|
||||
};
|
||||
|
||||
payload = {...payload, ...this.form.value}
|
||||
|
||||
this.node.process(this.action, this.number, this.type, this.nodeId, payload)
|
||||
.then( this.commit );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
app.registerClass('ICMPNodeActionConfirmDialog', ICMPNodeActionConfirmDialog);
|
||||
@@ -0,0 +1,434 @@
|
||||
<form>
|
||||
<h2>1. Focus on the technology</h2>
|
||||
<div class="cols-2 left tech">
|
||||
<input type="hidden" name="form.version" data-path="" value="1.0" />
|
||||
<input type="hidden" name="status" data-path="" value="" />
|
||||
<div class="tabs-extended vertical">
|
||||
<section>
|
||||
<menu eictab>
|
||||
<li data-target="attributes">Attributes<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="protection">Protection<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="validity">Validity<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="commercialisation">Commercialisation<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="milestones">Milestones<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="production">Value Chain<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="compliance">Compliance<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="feedbacks">Feedbacks<span xxsmall eicbadge danger></span></li>
|
||||
</menu>
|
||||
</section>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.1. Attributes</h1>
|
||||
<h2>qualities, shortcomings, use and possible extension</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.attributes" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.attributes" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.attributes" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.attributes" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.attributes" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.attributes" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.2. Protection</h1>
|
||||
<h2>patents, copyrights, trade secret, know-ho</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.protection" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.protection" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.protection" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.protection" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.protection" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.protection" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.3. Validity</h1>
|
||||
<h2>development plan, tests, prototype, demo, scalability</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.validity" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.validity" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.validity" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.validity" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.validity" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.validity" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.4. Commercialisation</h1>
|
||||
<h2>time and costs to develop, barriers and risks</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.commercialisation" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.commercialisation" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.commercialisation" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.commercialisation" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.commercialisation" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.commercialisation" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.5. Milestones</h1>
|
||||
<h2>Expert opinion: clear, complete, realistic? Costs and timing precisely explained?</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.milestones" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.milestones" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.milestones" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.milestones" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.milestones" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.milestones" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.6. Value Chain</h1>
|
||||
<h2>internal / external, supply chain, suppliers</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.production" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.production" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.production" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.production" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.production" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.production" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.7. Compliance</h1>
|
||||
<h2>current / future regulations, industry standards</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.compliance" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.compliance" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.compliance" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.compliance" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.compliance" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.compliance" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.8. Feedbacks</h1>
|
||||
<h2>from tests, lab results, prototypes, customers</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.feedbacks" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.feedbacks" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.feedbacks" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.feedbacks" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.feedbacks" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.feedbacks" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
<h2>2. Focus on the market</h2>
|
||||
<div class="cols-2 left market">
|
||||
<div class="tabs-extended vertical">
|
||||
<section>
|
||||
<menu eictab>
|
||||
<li data-target="landscape">Landscape<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="ecosystem">Ecosystem<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="positioning">Positioning<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="competition">Competition<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="opportunities">Opportunities<span xxsmall eicbadge danger></span></li>
|
||||
</menu>
|
||||
</section>
|
||||
</div>
|
||||
<div>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.1. Landscape</h1>
|
||||
<h2>market shares, trends, cycles, segments, regulations</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.landscape" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.landscape" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.landscape" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.landscape" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.landscape" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.landscape" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.2. Ecosystem</h1>
|
||||
<h2>actors and interactions (including competitors)</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.ecosystem" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.ecosystem" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.ecosystem" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.ecosystem" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.ecosystem" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.ecosystem" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.3. Positioning</h1>
|
||||
<h2>USP, alternatives, substitutes, comparaison</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.positioning" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.positioning" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.positioning" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.positioning" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.positioning" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.positioning" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.4. Competition</h1>
|
||||
<h2>who, how far, what traction, what funding</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.competition" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.competition" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.competition" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.competition" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.competition" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.competition" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.5. Opportunities</h1>
|
||||
<h2>procurement, expansion, export, trade</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.opportunities" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.opportunities" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.opportunities" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.opportunities" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.opportunities" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.opportunities" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
<h2>3. Focus on Strategy and business matters</h2>
|
||||
<div class="cols-2 left strategy">
|
||||
<div class="tabs-extended vertical">
|
||||
<section>
|
||||
<menu eictab>
|
||||
<li data-target="team">Team<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="scalability">Scalability<span xxsmall eicbadge danger></span></li>
|
||||
</menu>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>3.1. Team</h1>
|
||||
<h2>Team sizing, key profiles, hiring, critical external collaborations.</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.strategy.team" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.strategy.team" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.strategy.team" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="5000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.strategy.team" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.strategy.team" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.strategy.team" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>3.2. Scalability</h1>
|
||||
<h2>Growth speed, reach profitability</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.strategy.scalability" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.strategy.scalability" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.strategy.scalability" class="required" hint="Please try to provide an answer around 4000 chars length." maxlen="5000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.strategy.scalability" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.strategy.scalability" class="required" hint="Please try to provide an answer around 2000 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.strategy.scalability" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
<h2>General conclusions and recommendations</h2>
|
||||
<div>
|
||||
<label>Is the technology in combination with the company investable or not?</label>
|
||||
<div class="cols-3">
|
||||
<select eicselect name="choice" data-path="form.conclusion.combination" data-type="boolean" class="required">
|
||||
<option></option>
|
||||
<option value="true">Yes</option>
|
||||
<option value="false">No</option>
|
||||
</select>
|
||||
</div>
|
||||
<textarea eictextarea name="justification" data-path="form.conclusion.combination" class="required" hint="Please try to provide an answer between 3200 and 4000 chars." maxlen="7000" placeholder="please explain"></textarea>
|
||||
<textarea eictextarea name="justification" data-path="comments.conclusion.combination" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Did you identify issues or short comings? Should this be the case can you suggest recommendations to address them.</label>
|
||||
<div class="cols-3">
|
||||
<select eicselect name="choice" data-path="form.conclusion.issues" data-type="boolean" class="required">
|
||||
<option></option>
|
||||
<option value="true">Yes</option>
|
||||
<option value="false">No</option>
|
||||
</select>
|
||||
</div>
|
||||
<textarea eictextarea name="justification" data-path="form.conclusion.issues" class="required" hint="Please try to provide an answer between 3200 and 4000 chars." maxlen="7000" placeholder="please explain"></textarea>
|
||||
<textarea eictextarea name="justification" data-path="comments.conclusion.issues" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>In your opinion is the project aligned with the objectives of the EC funds on Deep tech, strategic priorities and sovereignity concerns?</label>
|
||||
<div class="cols-3">
|
||||
<select eicselect name="choice" data-path="form.conclusion.alignment" data-type="boolean" class="required">
|
||||
<option></option>
|
||||
<option value="true">Yes</option>
|
||||
<option value="false">No</option>
|
||||
</select>
|
||||
</div>
|
||||
<textarea eictextarea name="justification" data-path="form.conclusion.alignment" class="required" hint="Please try to provide an answer between 3200 and 4000 chars." maxlen="7000" placeholder="please explain"></textarea>
|
||||
<textarea eictextarea name="justification" data-path="comments.conclusion.alignment" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ICMPFormTechddV1EnhancedView extends ICMPFormTechddV1View {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
super.DOMContentLoaded(options);
|
||||
|
||||
this.tabStrategy = new Tab();
|
||||
this.tabStrategy.addTabs(
|
||||
this.findAll('.strategy .tabs-extended menu li'),
|
||||
this.findAll('.strategy article')
|
||||
);
|
||||
}
|
||||
|
||||
getTriggers() {
|
||||
return [].concat( this.tabTech.triggers, this.tabMarket.triggers, this.tabStrategy.triggers )
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
app.registerClass('ICMPFormTechddV1EnhancedView',ICMPFormTechddV1EnhancedView);
|
||||
@@ -0,0 +1,460 @@
|
||||
<form>
|
||||
<h2>Focus on the technology</h2>
|
||||
<div class="cols-2 left tech">
|
||||
<input type="hidden" name="form.version" data-path="" value="1.0" />
|
||||
<input type="hidden" name="status" data-path="" value="" />
|
||||
<div class="tabs-extended vertical">
|
||||
<section>
|
||||
<menu eictab>
|
||||
<li data-target="attributes">Attributes<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="protection">Protection<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="validity">Validity<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="commercialisation">Commercialisation<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="milestones">Milestones<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="production">Value Chain<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="compliance">Compliance<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="feedbacks">Feedbacks<span xxsmall eicbadge danger></span></li>
|
||||
</menu>
|
||||
</section>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.1. Attributes</h1>
|
||||
<h2>qualities, shortcomings, use and possible extension</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.attributes" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.attributes" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.attributes" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.attributes" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.attributes" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.attributes" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.2. Protection</h1>
|
||||
<h2>patents, copyrights, trade secret, know-ho</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.protection" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.protection" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.protection" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.protection" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.protection" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.protection" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.3. Validity</h1>
|
||||
<h2>development plan, tests, prototype, demo, scalability</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.validity" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.validity" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.validity" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.validity" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.validity" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.validity" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.4. Commercialisation</h1>
|
||||
<h2>time and costs to develop, barriers and risks</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.commercialisation" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.commercialisation" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.commercialisation" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.commercialisation" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.commercialisation" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.commercialisation" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.5. Milestones</h1>
|
||||
<h2>Expert opinion: clear, complete, realistic? Costs and timing precisely explained?</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.milestones" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.milestones" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.milestones" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.milestones" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.milestones" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.milestones" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.6. Value Chain</h1>
|
||||
<h2>internal / external, supply chain, suppliers</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.production" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.production" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.production" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.production" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.production" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.production" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.7. Compliance</h1>
|
||||
<h2>current / future regulations, industry standards</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.compliance" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.compliance" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.compliance" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.compliance" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.compliance" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.compliance" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.8. Feedbacks</h1>
|
||||
<h2>from tests, lab results, prototypes, customers</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.feedbacks" class="required" hint="Please try to provide an answer around 2500 chars length." maxlen="3000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.feedbacks" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.feedbacks" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.feedbacks" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.feedbacks" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.feedbacks" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
<h2>2. Focus on the market</h2>
|
||||
<div class="cols-2 left market">
|
||||
<div class="tabs-extended vertical">
|
||||
<section>
|
||||
<menu eictab>
|
||||
<li data-target="landscape">Landscape<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="ecosystem">Ecosystem<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="positioning">Positioning<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="competition">Competition<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="opportunities">Opportunities<span xxsmall eicbadge danger></span></li>
|
||||
</menu>
|
||||
</section>
|
||||
</div>
|
||||
<div>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.1. Landscape</h1>
|
||||
<h2>market shares, trends, cycles, segments, regulations</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.landscape" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.landscape" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.landscape" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.landscape" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.landscape" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.landscape" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.2. Ecosystem</h1>
|
||||
<h2>actors and interactions (including competitors)</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.ecosystem" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.ecosystem" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.ecosystem" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.ecosystem" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.ecosystem" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.ecosystem" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.3. Positioning</h1>
|
||||
<h2>USP, alternatives, substitutes, comparaison</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.positioning" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.positioning" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.positioning" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.positioning" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.positioning" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.positioning" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.4. Competition</h1>
|
||||
<h2>who, how far, what traction, what funding</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.competition" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.competition" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.competition" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.competition" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.competition" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.competition" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.5. Opportunities</h1>
|
||||
<h2>procurement, expansion, export, trade</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.opportunities" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.opportunities" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.opportunities" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.opportunities" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.opportunities" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.opportunities" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>3. Focus on Strategy and business matters</h2>
|
||||
<div class="cols-2 left strategy">
|
||||
<div class="tabs-extended vertical">
|
||||
<section>
|
||||
<menu eictab>
|
||||
<li data-target="team">Team<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="scalability">Scalability<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="business">Business model<span xxsmall eicbadge danger></span></li>
|
||||
</menu>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>3.1. Team</h1>
|
||||
<h2>Team sizing, key profiles, hiring, critical external collaborations.</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.strategy.team" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.strategy.team" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.strategy.team" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.strategy.team" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.strategy.team" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.strategy.team" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>3.2. Scalability</h1>
|
||||
<h2>Growth speed, reach profitability</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.strategy.scalability" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.strategy.scalability" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.strategy.scalability" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.strategy.scalability" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.strategy.scalability" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.strategy.scalability" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>3.3. Business model</h1>
|
||||
<h2>Key revenues, Capex, Cost assumptions in the Business model</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.strategy.business" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6500"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.strategy.business" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.strategy.business" class="required" hint="Please try to provide an answer around 6000 chars length." maxlen="9000"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.strategy.business" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.strategy.business" class="required" hint="Please try to provide an answer around 4500 chars length." maxlen="6000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.strategy.business" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<h2>General conclusions and recommendations</h2>
|
||||
<div>
|
||||
<label>Is the technology in combination with the company investable or not?</label>
|
||||
<div class="cols-3">
|
||||
<select eicselect name="choice" data-path="form.conclusion.combination" data-type="boolean" class="required">
|
||||
<option></option>
|
||||
<option value="true">Yes</option>
|
||||
<option value="false">No</option>
|
||||
</select>
|
||||
</div>
|
||||
<textarea eictextarea name="justification" data-path="form.conclusion.combination" class="required" hint="Please try to provide an answer between 3200 and 4000 chars." maxlen="7000" placeholder="please explain"></textarea>
|
||||
<textarea eictextarea name="justification" data-path="comments.conclusion.combination" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Did you identify issues or short comings? Should this be the case can you suggest recommendations to address them.</label>
|
||||
<div class="cols-3">
|
||||
<select eicselect name="choice" data-path="form.conclusion.issues" data-type="boolean" class="required">
|
||||
<option></option>
|
||||
<option value="true">Yes</option>
|
||||
<option value="false">No</option>
|
||||
</select>
|
||||
</div>
|
||||
<textarea eictextarea name="justification" data-path="form.conclusion.issues" class="required" hint="Please try to provide an answer between 3200 and 4000 chars." maxlen="7000" placeholder="please explain"></textarea>
|
||||
<textarea eictextarea name="justification" data-path="comments.conclusion.issues" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>In your opinion is the project aligned with the objectives of the EC funds on Deep tech, strategic priorities and sovereignity concerns?</label>
|
||||
<div class="cols-3">
|
||||
<select eicselect name="choice" data-path="form.conclusion.alignment" data-type="boolean" class="required">
|
||||
<option></option>
|
||||
<option value="true">Yes</option>
|
||||
<option value="false">No</option>
|
||||
</select>
|
||||
</div>
|
||||
<textarea eictextarea name="justification" data-path="form.conclusion.alignment" class="required" hint="Please try to provide an answer between 3200 and 4000 chars." maxlen="7000" placeholder="please explain"></textarea>
|
||||
<textarea eictextarea name="justification" data-path="comments.conclusion.alignment" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ICMPFormTechddV1FullView extends ICMPFormTechddV1View {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
super.DOMContentLoaded(options);
|
||||
|
||||
this.tabStrategy = new Tab();
|
||||
this.tabStrategy.addTabs(
|
||||
this.findAll('.strategy .tabs-extended menu li'),
|
||||
this.findAll('.strategy article')
|
||||
);
|
||||
}
|
||||
|
||||
getTriggers() {
|
||||
return [].concat( this.tabTech.triggers, this.tabMarket.triggers, this.tabStrategy.triggers )
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
app.registerClass('ICMPFormTechddV1FullView',ICMPFormTechddV1FullView);
|
||||
@@ -0,0 +1,352 @@
|
||||
<form>
|
||||
<h2>1. Focus on the technology</h2>
|
||||
<div class="cols-2 left tech">
|
||||
<input type="hidden" name="form.version" data-path="" value="1.0" />
|
||||
<input type="hidden" name="status" data-path="" value="" />
|
||||
<div class="tabs-extended vertical">
|
||||
<section>
|
||||
<menu eictab>
|
||||
<li data-target="attributes">Attributes<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="protection">Protection<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="validity">Validity<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="commercialisation">Commercialisation<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="milestones">Milestones<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="production">Value Chain<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="compliance">Compliance<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="feedbacks">Feedbacks<span xxsmall eicbadge danger></span></li>
|
||||
</menu>
|
||||
</section>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.1. Attributes</h1>
|
||||
<h2>qualities, shortcomings, use and possible extension</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.attributes" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.attributes" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.attributes" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.attributes" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.attributes" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.attributes" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.2. Protection</h1>
|
||||
<h2>patents, copyrights, trade secret, know-ho</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.protection" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.protection" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.protection" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.protection" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.protection" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.protection" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.3. Validity</h1>
|
||||
<h2>development plan, tests, prototype, demo, scalability</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.validity" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.validity" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.validity" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.validity" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.validity" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.validity" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.4. Commercialisation</h1>
|
||||
<h2>time and costs to develop, barriers and risks</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.commercialisation" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.commercialisation" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.commercialisation" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.commercialisation" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.commercialisation" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.commercialisation" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.5. Milestones</h1>
|
||||
<h2>Expert opinion: clear, complete, realistic? Costs and timing precisely explained?</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.milestones" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.milestones" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.milestones" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.milestones" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.milestones" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.milestones" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.6. Value Chain</h1>
|
||||
<h2>internal / external, supply chain, suppliers</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.production" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.production" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.production" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.production" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.production" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.production" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.7. Compliance</h1>
|
||||
<h2>current / future regulations, industry standards</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.compliance" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.compliance" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.compliance" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.compliance" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.compliance" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.compliance" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>1.8. Feedbacks</h1>
|
||||
<h2>from tests, lab results, prototypes, customers</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.technology.feedbacks" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.technology.feedbacks" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.technology.feedbacks" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.technology.feedbacks" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.technology.feedbacks" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.technology.feedbacks" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
<h2>2. Focus on the market</h2>
|
||||
<div class="cols-2 left market">
|
||||
<div class="tabs-extended vertical">
|
||||
<section>
|
||||
<menu eictab>
|
||||
<li data-target="landscape">Landscape<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="ecosystem">Ecosystem<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="positioning">Positioning<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="competition">Competition<span xxsmall eicbadge danger></span></li>
|
||||
<li data-target="opportunities">Opportunities<span xxsmall eicbadge danger></span></li>
|
||||
</menu>
|
||||
</section>
|
||||
</div>
|
||||
<div>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.1. Landscape</h1>
|
||||
<h2>market shares, trends, cycles, segments, regulations</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.landscape" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.landscape" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.landscape" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.landscape" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.landscape" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.landscape" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.2. Ecosystem</h1>
|
||||
<h2>actors and interactions (including competitors)</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.ecosystem" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.ecosystem" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.ecosystem" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.ecosystem" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.ecosystem" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.ecosystem" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.3. Positioning</h1>
|
||||
<h2>USP, alternatives, substitutes, comparaison</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.positioning" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.positioning" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.positioning" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.positioning" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.positioning" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.positioning" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.4. Competition</h1>
|
||||
<h2>who, how far, what traction, what funding</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.competition" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.competition" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.competition" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.competition" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.competition" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.competition" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<article eiccard>
|
||||
<header>
|
||||
<h1>2.5. Opportunities</h1>
|
||||
<h2>procurement, expansion, export, trade</h2>
|
||||
</header>
|
||||
<section>
|
||||
<div>
|
||||
<label>Abstract</label>
|
||||
<textarea eictextarea name="abstract" data-path="form.market.opportunities" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="abstract" data-path="comments.market.opportunities" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Expert opinion</label>
|
||||
<textarea eictextarea name="expertOpinion" data-path="form.market.opportunities" class="required" hint="Please try to provide an answer around 3000 chars length." maxlen="4500"></textarea>
|
||||
<textarea eictextarea name="expertOpinion" data-path="comments.market.opportunities" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label>Risk(s)</label>
|
||||
<textarea eictextarea name="risks" data-path="form.market.opportunities" class="required" hint="Please try to provide an answer around 1500 chars length." maxlen="2000"></textarea>
|
||||
<textarea eictextarea name="risks" data-path="comments.market.opportunities" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
<h2>General conclusions and recommendations</h2>
|
||||
<div>
|
||||
<label>Is the technology in combination with the company investable or not?</label>
|
||||
<div class="cols-3">
|
||||
<select eicselect name="combination" data-path="form.conclusion" data-type="boolean" class="required">
|
||||
<option></option>
|
||||
<option value="true">Yes</option>
|
||||
<option value="false">No</option>
|
||||
</select>
|
||||
</div>
|
||||
<textarea eictextarea name="justification" data-path="form.conclusion" class="required" hint="Please try to provide an answer between 3200 and 4000 chars." maxlen="7000" placeholder="please explain"></textarea>
|
||||
<textarea eictextarea name="justification" data-path="comments.conclusion" class="" hint="" placeholder="Place your comments here"></textarea>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ICMPFormTechddV1View extends EICDomContent {
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
this.components = ui.eicfy(this.el);
|
||||
//for(let model in options.models) this[model] = options.models[model];
|
||||
console.log('tabs')
|
||||
|
||||
this.tabTech = new Tab();
|
||||
this.tabTech.addTabs(this.findAll('.tech .tabs-extended menu li'), this.findAll('.tech article'))
|
||||
this.tabMarket = new Tab();
|
||||
this.tabMarket.addTabs(this.findAll('.market .tabs-extended menu li'), this.findAll('.market article'))
|
||||
}
|
||||
|
||||
fill(data) {
|
||||
this.form = new Form(this.find('form'));
|
||||
this.form.fill(this.components, data);
|
||||
|
||||
}
|
||||
|
||||
getTriggers() {
|
||||
return [].concat( this.tabTech.triggers, this.tabMarket.triggers )
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
app.registerClass('ICMPFormTechddV1View',ICMPFormTechddV1View);
|
||||
Reference in New Issue
Block a user