initial commit
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.studio.test;
|
||||
|
||||
import com.axelor.app.AppModule;
|
||||
import com.axelor.auth.AuthModule;
|
||||
import com.axelor.db.JpaModule;
|
||||
import com.axelor.rpc.ObjectMapperProvider;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
public class TestModule extends AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(ObjectMapper.class).toProvider(ObjectMapperProvider.class);
|
||||
|
||||
install(new JpaModule("testUnit", true, true));
|
||||
install(new AuthModule());
|
||||
install(new AppModule());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.studio.test;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import org.junit.Test;
|
||||
import org.w3c.tidy.Tidy;
|
||||
|
||||
public class TestReportBuilder {
|
||||
|
||||
@Test
|
||||
public void testJsoup() {
|
||||
try {
|
||||
byte[] encoded =
|
||||
Files.readAllBytes(
|
||||
Paths.get(
|
||||
"/home/axelor/studio/studio-app/modules/axelor-studio/src/main/resources/css/studio.css"));
|
||||
String css = new String(encoded, "utf-8");
|
||||
|
||||
String html =
|
||||
"<div><table class=\"table no-border\">"
|
||||
+ "<tbody><tr><td><table><tbody><tr><td><h4><u>Panel</u></h4><p><u><br></u></p><p>"
|
||||
+ "<span style=\"text-decoration: underline; background-color: rgb(63, 207, 255);\">"
|
||||
+ "TESTING</span></p></td></tr><tr><td><b>Status</b> : Validate</td><td><b>Customer</b> :"
|
||||
+ "test</td></tr><tr><td><b>Order no.</b> : </td><td><b>Order date</b> : </td></tr><tr><td "
|
||||
+ "colspan=\"2\"><h4>Lines</h4></td></tr><tr><td colspan=\"2\">"
|
||||
+ "<table class=\"table table-bordered table-header\"><tbody><tr><th>Sequence</th>"
|
||||
+ "<th>Product</th><th>Descripiton</th><th>Qty</th><th>Total</th><th>Price</th></tr>"
|
||||
+ "<tr><td>0</td><td>Product2</td><td>sdas</td><td>2</td><td>44.00</td><td>22.00</td></tr>"
|
||||
+ "</tbody></table></td></tr><tr><td><b>Total</b> : 44.00</td></tr></tbody></table></td></tr>"
|
||||
+ "</tbody></table></div>";
|
||||
html = "<div class=\"content\">" + html + "</div>";
|
||||
html =
|
||||
"<html><head><style type=\"text/css\">"
|
||||
+ css
|
||||
+ "</style></head><body>"
|
||||
+ html
|
||||
+ "</body></html>";
|
||||
|
||||
html =
|
||||
"<table class=\"table no-border\"><tbody><tr><td><table><tbody><tr><td><h4><u>Panel</u>"
|
||||
+ "</h4><p><u><br></u></p><p><span style=\"text-decoration: underline; background-color: rgb(63, 207, 255);\">"
|
||||
+ "TESTING</span></p></td></tr><tr><td><b>Status</b> : Validate</td><td><b>Customer</b> : test</td>"
|
||||
+ "</tr><tr><td><b>Order no.</b> : </td><td><b>Order date</b> : </td></tr><tr><td colspan=\"2\">"
|
||||
+ "<h4><span style=\"font-size: 13px;\">Total</span><span style=\"font-size: 13px; font-weight: normal;\">"
|
||||
+ " : 44.00</span><br></h4></td></tr><tr><td><br></td></tr></tbody></table></td></tr></tbody></table>";
|
||||
|
||||
Tidy tidy = new Tidy();
|
||||
tidy.setXHTML(true);
|
||||
tidy.setShowWarnings(false);
|
||||
tidy.setTidyMark(false);
|
||||
tidy.setDocType("omit");
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(html.getBytes());
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
tidy.parse(in, out);
|
||||
|
||||
System.out.println(new String(out.toByteArray()));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
|
||||
<persistence-unit name="testUnit" transaction-type="RESOURCE_LOCAL">
|
||||
<provider>org.hibernate.ejb.HibernatePersistence</provider>
|
||||
<properties>
|
||||
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
|
||||
<property name="hibernate.max_fetch_depth" value="3"/>
|
||||
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
|
||||
<property name="javax.persistence.jdbc.user" value="axelor"/>
|
||||
<property name="javax.persistence.jdbc.password" value="lmdpdlaa"/>
|
||||
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/studio"/>
|
||||
<property name="hibernate.hbm2ddl.auto" value="update"/>
|
||||
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
|
||||
<property name="hibernate.connection.charSet" value="UTF-8"/>
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
</persistence>
|
||||
@@ -0,0 +1,218 @@
|
||||
# Application Information
|
||||
# ~~~~~
|
||||
application.name = studio-app
|
||||
application.description = Studio app
|
||||
application.version = 1.0.0
|
||||
|
||||
# Author/Company
|
||||
# ~~~~~
|
||||
application.author = Axelor
|
||||
application.copyright = Copyright (c) {year} Axelor. All Rights Reserved.
|
||||
|
||||
# Header Logo
|
||||
# ~~~~~
|
||||
# Should be 40px in height with transparent background
|
||||
application.logo =
|
||||
|
||||
# Home Website
|
||||
# ~~~~~
|
||||
# Link to be used with header logo
|
||||
application.home = http://www.axelor.com
|
||||
|
||||
# Link to the online help
|
||||
# ~~~~~
|
||||
application.help = http://axelor.com/docs/adk
|
||||
|
||||
# Application deployment mode
|
||||
# ~~~~~
|
||||
# Set to 'dev' for development mode else 'prod'
|
||||
application.mode = dev
|
||||
|
||||
# CSS Theme
|
||||
# ~~~~~
|
||||
# Set default CSS theme, for example `blue`
|
||||
application.theme =
|
||||
|
||||
# Default Locale (language)
|
||||
# ~~~~~
|
||||
# Set default application locale (en, fr, fr_FR, en_US)
|
||||
application.locale =
|
||||
|
||||
# Database settings
|
||||
# ~~~~~
|
||||
# See hibernate documentation for connection parameters
|
||||
|
||||
# PostgreSQL
|
||||
db.default.dialect = org.hibernate.dialect.PostgreSQLDialect
|
||||
db.default.driver = org.postgresql.Driver
|
||||
db.default.ddl = update
|
||||
db.default.url = jdbc:postgresql://localhost:5432/studio
|
||||
db.default.user = axelor
|
||||
db.default.password = lmdpdlaa
|
||||
|
||||
# MySQL
|
||||
#db.default.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
|
||||
#db.default.driver = com.mysql.jdbc.Driver
|
||||
#db.default.ddl = update
|
||||
uu
|
||||
#db.default.url = jdbc:mysql://localhost:3306/model_import_app_dev
|
||||
#db.default.user = axelor
|
||||
#db.default.password =
|
||||
|
||||
# Date Format
|
||||
# ~~~~~
|
||||
date.format = dd/MM/yyyy
|
||||
|
||||
# Timezone
|
||||
# ~~~~~
|
||||
date.timezone = UTC
|
||||
|
||||
# Session timeout (in minutes)
|
||||
# ~~~~~
|
||||
session.timeout = 60
|
||||
|
||||
# Storage path for upload files (attachments)
|
||||
# ~~~~~
|
||||
# use {user.home} key to save files under user home directory, or
|
||||
# use absolute path where server user have write permission.
|
||||
file.upload.dir = {user.home}/attachments
|
||||
|
||||
# Maximum upload size (in MB)
|
||||
# ~~~~~
|
||||
file.upload.size = 5
|
||||
|
||||
# The external report design directory
|
||||
# ~~~~~
|
||||
# this directory is searched for the rptdesign files
|
||||
# (fallbacks to designs provided by modules)
|
||||
reports.design.dir = {user.home}/.axelor/reports
|
||||
|
||||
# Storage path for report outputs
|
||||
reports.output.dir = {user.home}/.axelor/reports-gen
|
||||
|
||||
# Data export (csv) encoding
|
||||
# ~~~~
|
||||
# Use Windows-1252, ISO-8859-1 or ISO-8859-15 if targeting ms excel
|
||||
# (excel does not recognize utf8 encoded csv)
|
||||
data.export.encoding = UTF-8
|
||||
|
||||
# Storage path for export action
|
||||
# ~~~~~
|
||||
data.export.dir = {user.home}/.axelor/data-export
|
||||
|
||||
# Specify whether to import demo data
|
||||
# ~~~~~
|
||||
data.import.demo-data = false
|
||||
|
||||
# Storage path for templates
|
||||
# ~~~~~
|
||||
template.search.dir = {user.home}/.axelor/templates
|
||||
|
||||
# LDAP Configuration
|
||||
# ~~~~~
|
||||
#ldap.server.url = ldap://localhost:10389
|
||||
|
||||
# can be "simple" or "CRAM-MD5"
|
||||
ldap.auth.type = simple
|
||||
|
||||
ldap.system.user = uid=admin,ou=system
|
||||
ldap.system.password = secret
|
||||
|
||||
# group search base
|
||||
ldap.group.base = ou=groups,dc=example,dc=com
|
||||
|
||||
# if set, create groups on ldap server under ldap.group.base
|
||||
#ldap.group.object.class = groupOfUniqueNames
|
||||
|
||||
# a template to search groups by user login id
|
||||
ldap.group.filter = (uniqueMember=uid={0})
|
||||
|
||||
# user search base
|
||||
ldap.user.base = ou=users,dc=example,dc=com
|
||||
|
||||
# a template to search user by user login id
|
||||
ldap.user.filter = (uid={0})
|
||||
|
||||
# CAS configuration
|
||||
# ~~~~~
|
||||
#cas.server.url.prefix = https://localhost:8443/cas
|
||||
|
||||
# use public accessible url
|
||||
#cas.service = http://localhost:8080/axelor-demo/cas
|
||||
|
||||
# login url, if not given prepared from server & service url
|
||||
#cas.login.url = https://localhost:8443/cas/login?service=http://localhost:8080/axelor-demo/cas
|
||||
|
||||
# logout url, if not given prepared from server & service url
|
||||
#cas.logout.url = https://localhost:8443/cas/logout?service=http://localhost:8080/axelor-demo/
|
||||
|
||||
# CAS validation protocol (CAS, SAML)
|
||||
#cas.protocol = SAML
|
||||
|
||||
# the attribute to map to user display name
|
||||
#cas.attrs.user.name = name
|
||||
|
||||
# the attribute to map to user email
|
||||
#cas.attrs.user.email = mail
|
||||
|
||||
# Quartz Scheduler
|
||||
# ~~~~~
|
||||
# quartz job scheduler
|
||||
|
||||
# Specify whether to enable quartz scheduler
|
||||
quartz.enable = false
|
||||
|
||||
# total number of threads in quartz thread pool
|
||||
# the number of jobs that can run simultaneously
|
||||
quartz.threadCount = 3
|
||||
|
||||
# SMPT configuration
|
||||
# ~~~~~
|
||||
# SMTP server configuration
|
||||
#mail.smtp.host = smtp.gmail.com
|
||||
#mail.smtp.port = 587
|
||||
#mail.smtp.channel = starttls
|
||||
#mail.smtp.user = user.name@gmail.com
|
||||
#mail.smtp.pass =
|
||||
|
||||
# timeout settings
|
||||
#mail.smtp.timeout = 60000
|
||||
#mail.smtp.connectionTimeout = 60000
|
||||
|
||||
# IMAP configuration
|
||||
# ~~~~~
|
||||
# IMAP server configuration
|
||||
# (quartz scheduler should be enabled for fetching stream replies)
|
||||
#mail.imap.host = imap.gmail.com
|
||||
#mail.imap.port = 993
|
||||
#mail.imap.channel = ssl
|
||||
#mail.imap.user = user.name@axelor.com
|
||||
#mail.imap.pass =
|
||||
|
||||
# timeout settings
|
||||
#mail.imap.timeout = 60000
|
||||
#mail.imap.connectionTimeout = 60000
|
||||
|
||||
# CORS configuration
|
||||
# ~~~~~
|
||||
# CORS settings to allow cross origin requests
|
||||
|
||||
# regular expression to test allowed origin or * to allow all (not recommended)
|
||||
#cors.allow.origin = *
|
||||
#cors.allow.credentials = true
|
||||
#cors.allow.methods = GET,PUT,POST,DELETE,HEAD,OPTIONS
|
||||
#cors.allow.headers = Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers
|
||||
|
||||
# View configuration
|
||||
# ~~~~~
|
||||
|
||||
# Set to true to enable single view mode
|
||||
view.single.tab = false
|
||||
|
||||
# Set menu style (left, top, both)
|
||||
view.menubar.location = both
|
||||
|
||||
build.dir = /home/axelor/studio/studio-app
|
||||
axelor.home = /home/axelor/demo/axelor-open-platform/build/install/axelor-open-platform
|
||||
tomcat.path = /home/axelor/opt/apache-tomcat-7.0.39
|
||||
app.name = studio-app-1.0.0
|
||||
@@ -0,0 +1,79 @@
|
||||
<?xml version="1.0"?>
|
||||
<xml-inputs xmlns="http://axelor.com/xml/ns/data-import"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/data-import http://axelor.com/xml/ns/data-import/data-import_5.2.xsd">
|
||||
|
||||
<input file="studio-data.xml" root="studio-data">
|
||||
|
||||
<bind node="MetaSelect" type="com.axelor.meta.db.MetaSelect" search="self.name = :_select" update="true" call="com.axelor.studio.service.data.ImportScript:updateMetaSelect">
|
||||
<bind node="name" to="name" />
|
||||
<bind node="name" to="_select" />
|
||||
<bind node="items/item" to="items" search="self.select.name = :_select and self.value = :value">
|
||||
<bind node="title" to="title" />
|
||||
<bind node="value" to="value" />
|
||||
<bind node="order" to="order"/>
|
||||
</bind>
|
||||
</bind>
|
||||
|
||||
<!--<bind node="MetaModel" type="com.axelor.meta.db.MetaModel" search="self.name = :name" update="false">
|
||||
<bind node="name" to="name" />
|
||||
<bind node="name" to="_model" />
|
||||
<bind to="edited" eval="true"/>
|
||||
<bind to="customised" eval="true"/>
|
||||
<bind node="packageName" to="packageName" />
|
||||
<bind node="fullName" to="fullName" />
|
||||
<bind node="metaFields/item" to="metaFields" search="self.name = :_field and self.metaModel.name = :_model">
|
||||
<bind to="customised" eval="true" />
|
||||
<bind node="name" to="name"/>
|
||||
<bind node="name" to="_field"/>
|
||||
<bind node="label" to="label"/>
|
||||
<bind node="typeName" to="typeName"/>
|
||||
<bind node="fieldType" to="fieldType"/>
|
||||
<bind node="large" to="large"/>
|
||||
<bind node="hidden" to="hidden"/>
|
||||
<bind node="required" to="required"/>
|
||||
<bind node="relationship" to="relationship" />
|
||||
<bind node="defaultString" to="defaultString"/>
|
||||
<bind node="defaultBoolean" to="defaultBoolean" />
|
||||
<bind node="defaultDecimal" to="defaultDecimal" />
|
||||
<bind node="decimalMin" to="decimalMin" />
|
||||
<bind node="decimalMax" to="decimalMax" />
|
||||
<bind node="defaultInteger" to="defaultInteger" />
|
||||
<bind node="integerMin" to="integerMin"/>
|
||||
<bind node="integerMax" to="integerMax"/>
|
||||
<bind node="metaselect" to="metaSelect" search="self.name = :metaSelect"/>
|
||||
<bind to="metaModelRef" search="self.name = :metaModelRef" if="metaModelRef != null"/>
|
||||
<bind node="readonly" to="readonly" />
|
||||
<bind node="hidden" to="hidden" />
|
||||
<bind node="required" to="required" />
|
||||
<bind node="multiselect" to="multiselect" />
|
||||
<bind node="sequence" to="sequence" />
|
||||
<bind node="isDuration" to="isDuration" />
|
||||
<bind node="isUrl" to="isUrl" />
|
||||
<bind node="helpText" to="helpText" />
|
||||
<bind node="rightManagementList/item" to="rightManagementList" search="self.metaField.name = :_field and self.metaField.metaModel.name = :_model and self.name = :name">
|
||||
<bind node="authGroup" to="authGroup" search="self.name = :authGroup" />
|
||||
<bind node="authRole" to="authRole" search="self.name = :authRole" />
|
||||
<bind node="canRead" to="canRead" />
|
||||
<bind node="canWrite" to="canWrite" />
|
||||
<bind node="canCreate" to="canCreate" />
|
||||
<bind node="canRemove" to="canRemove" />
|
||||
<bind node="canExport" to="canExport" />
|
||||
<bind node="condition" to="condition" />
|
||||
</bind>
|
||||
</bind>
|
||||
<bind node="rightManagementList/item" to="rightManagementList" search="self.metaModel.name = :_model and self.name = :name">
|
||||
<bind node="authGroup" to="authGroup" search="self.name = :authGroup" />
|
||||
<bind node="authRole" to="authRole" search="self.name = :authRole" />
|
||||
<bind node="canRead" to="canRead" />
|
||||
<bind node="canWrite" to="canWrite" />
|
||||
<bind node="canCreate" to="canCreate" />
|
||||
<bind node="canRemove" to="canRemove" />
|
||||
<bind node="canExport" to="canExport" />
|
||||
<bind node="condition" to="condition" />
|
||||
</bind>
|
||||
</bind> -->
|
||||
|
||||
</input>
|
||||
|
||||
</xml-inputs>
|
||||
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<studio-data xmlns:ns2="http://axelor.com/xml/ns/object-views">
|
||||
<models name="ProductCategory" packageName="com.axelor.apps.custom.db" title="Product category">
|
||||
<fields>
|
||||
<field fieldType="boolean" label="Active" name="active" typeName="Boolean"/>
|
||||
<field fieldType="string" label="Code" name="code" typeName="String"/>
|
||||
<field fieldType="string" label="Name" name="name" typeName="String"/>
|
||||
</fields>
|
||||
</models>
|
||||
<models name="Product" packageName="com.axelor.apps.custom.db">
|
||||
<fields>
|
||||
<field fieldType="many-to-one" label="Category" name="productCategory" typeName="ProductCategory"/>
|
||||
<field fieldType="string" label="Type" name="productType" typeName="String">
|
||||
<selection name="productType">
|
||||
<ns2:option value="product" order="1">Product</ns2:option>
|
||||
<ns2:option value="service" order="2">Service</ns2:option>
|
||||
<ns2:option value="expense" order="3">Expense</ns2:option>
|
||||
</selection>
|
||||
</field>
|
||||
<field fieldType="decimal" label="Price" name="price" typeName="BigDecimal"/>
|
||||
<field fieldType="integer" label="Minimum Qty" name="minumQty" typeName="Integer"/>
|
||||
<field fieldType="string" label="Code" name="code" typeName="String"/>
|
||||
<field fieldType="string" label="Name" name="name" typeName="String"/>
|
||||
</fields>
|
||||
</models>
|
||||
<models name="Customer" packageName="com.axelor.apps.custom.db">
|
||||
<fields>
|
||||
<field fieldType="integer" label="Active categories" name="totalActiveCateg" typeName="Integer"/>
|
||||
<field fieldType="integer" label="Total categories" name="totalCategories" typeName="Integer"/>
|
||||
<field fieldType="many-to-many" label="Product categories" name="productCategories" typeName="ProductCategory"/>
|
||||
<field fieldType="string" label="Address" name="address" typeName="String"/>
|
||||
<field fieldType="string" label="Code" name="code" typeName="String"/>
|
||||
<field fieldType="string" label="Name" name="name" typeName="String"/>
|
||||
<field fieldType="date" label="Dob" name="dob" typeName="LocalDate"/>
|
||||
</fields>
|
||||
</models>
|
||||
<models name="OrderPolicy" packageName="com.axelor.apps.custom.db" title="Order policy">
|
||||
<fields>
|
||||
<field fieldType="string" label="Code" name="code" typeName="String"/>
|
||||
<field fieldType="string" label="Name" name="name" typeName="String"/>
|
||||
</fields>
|
||||
</models>
|
||||
<models name="OrderLine" packageName="com.axelor.apps.custom.db" title="Order line">
|
||||
<fields>
|
||||
<field fieldType="decimal" label="Total amt" name="totalAmt" typeName="BigDecimal"/>
|
||||
<field fieldType="integer" label="Quantity" name="qty" typeName="Integer"/>
|
||||
<field fieldType="many-to-one" label="Product Category" name="productCategory" typeName="ProductCategory"/>
|
||||
<field fieldType="many-to-one" label="Product" name="product" typeName="Product"/>
|
||||
</fields>
|
||||
</models>
|
||||
<models name="Order" packageName="com.axelor.apps.custom.db">
|
||||
<fields>
|
||||
<field fieldType="integer" label="Avg qty" name="avgQty" typeName="Integer"/>
|
||||
<field fieldType="integer" label="Min qty" name="minQty" typeName="Integer"/>
|
||||
<field fieldType="integer" label="Max qty" name="maxQty" typeName="Integer"/>
|
||||
<field fieldType="decimal" label="Total" name="total" typeName="BigDecimal"/>
|
||||
<field fieldType="string" label="Notes" name="notes" typeName="String"/>
|
||||
<field fieldType="many-to-one" label="Policy" name="orderPolicy" typeName="OrderPolicy"/>
|
||||
<field fieldType="string" label="Order no." name="orderNumber" typeName="String"/>
|
||||
<field fieldType="date" label="Date" name="orderDate" typeName="LocalDate"/>
|
||||
<field fieldType="many-to-one" label="Salesman" name="salesman" typeName="User"/>
|
||||
<field fieldType="many-to-one" label="Customer" name="customer" typeName="Customer"/>
|
||||
<field fieldType="one-to-many" label="Lines" name="lines" typeName="OrderLine"/>
|
||||
</fields>
|
||||
</models>
|
||||
</studio-data>
|
||||
Reference in New Issue
Block a user