document db no longer storing complete template information in separate table:
- dropped table templates - altered table documents: template_id (ref into templates) → template (name of template) - templates are now picked up by the document registry Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -363,7 +363,7 @@ public class DocumentApi extends BaseHandler implements DocumentService {
|
||||
}
|
||||
|
||||
private Content renderDocument(Document document, UmbrellaUser user) throws UmbrellaException {
|
||||
var template = document.template().name();
|
||||
var template = document.template();
|
||||
var templateName = template+".html.pdf";
|
||||
var type = document.type().name();
|
||||
var zugferd = "invoice".equals(type);
|
||||
@@ -517,8 +517,10 @@ public class DocumentApi extends BaseHandler implements DocumentService {
|
||||
if (!(json.has(COMPANY) && json.get(COMPANY) instanceof Number companyId)) throw missingFieldException(COMPANY);
|
||||
var company = companyService().get(companyId.longValue());
|
||||
if (!companyService().membership(companyId.longValue(),user.id())) throw forbidden("You are not a member of {0}",company.name());
|
||||
var templates = db.getCompanyTemplates(companyId.longValue());
|
||||
return sendContent(ex,templates.stream().map(Template::toMap));
|
||||
var templates = registry.documents()
|
||||
.filter(d -> d.name().endsWith(".template"))
|
||||
.map(d -> d.name().replaceAll("(\\.[^.]+)?\\.template$",""));
|
||||
return sendContent(ex,templates);
|
||||
}
|
||||
|
||||
private boolean postSearch(HttpExchange ex, UmbrellaUser user) throws IOException {
|
||||
|
||||
@@ -27,8 +27,6 @@ public interface DocumentDb {
|
||||
|
||||
CustomerSettings getCustomerSettings(long companyId, Type docType, String customerId) throws UmbrellaException;
|
||||
|
||||
Collection<Template> getCompanyTemplates(long l) throws UmbrellaException;
|
||||
|
||||
Type getType(int typeId) throws UmbrellaException;
|
||||
|
||||
Map<Long, Document> listDocs(long companyId) throws UmbrellaException;
|
||||
|
||||
@@ -52,21 +52,23 @@ public class SqliteDb extends BaseDb implements DocumentDb{
|
||||
createTablePositions();
|
||||
createTableCustomerPrices();
|
||||
createTableCustomerSettings();
|
||||
case 1:
|
||||
dropTemplateTable();
|
||||
alterTemplateColumn();
|
||||
}
|
||||
return setCurrentVersion(1);
|
||||
return setCurrentVersion(2);
|
||||
}
|
||||
|
||||
/*private void createTableCompanySettings() {
|
||||
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL, {2} INT NOT NULL, {3} TEXT DEFAULT \"A\", {4} TEXT DEFAULT NULL, {5} INT NOT NULL DEFAULT 1, PRIMARY KEY ({1}, {2}))";
|
||||
private void alterTemplateColumn() {
|
||||
try {
|
||||
var stmt = db.prepareStatement(format(sql,TABLE_COMPANY_SETTINGS, COMPANY_ID,DOC_TYPE_ID,TYPE_PREFIX,TYPE_SUFFIX,TYPE_NUMBER));
|
||||
stmt.execute();
|
||||
stmt.close();
|
||||
var sql = format("ALTER TABLE {0} DROP COLUMN {1}",TABLE_DOCUMENTS,TEMPLATE_ID);
|
||||
db.prepareStatement(sql).execute();
|
||||
sql = format("ALTER TABLE {0} ADD COLUMN {1} VARCHAR(255)",TABLE_DOCUMENTS,TEMPLATE);
|
||||
db.prepareStatement(sql).execute();
|
||||
} catch (SQLException e) {
|
||||
LOG.log(ERROR,ERROR_FAILED_CREATE_TABLE,TABLE_COMPANY_SETTINGS,e);
|
||||
throw new RuntimeException(e);
|
||||
throw databaseException("Failed to update column {0} → {1} of {2}",TEMPLATE_ID,TEMPLATE,TABLE_DOCUMENTS);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
private void createTableCustomerPrices() {
|
||||
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL, {2} VARCHAR(255), {3} VARCHAR(50), {4} INTEGER)";
|
||||
@@ -252,17 +254,12 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
|
||||
return pos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Template> getCompanyTemplates(long companyId) throws UmbrellaException {
|
||||
private void dropTemplateTable() {
|
||||
try {
|
||||
|
||||
var rs = select(ALL).from(TABLE_TEMPLATES).where(COMPANY_ID,equal(companyId)).exec(db);
|
||||
var templates = new HashSet<Template>();
|
||||
while (rs.next()) templates.add(Template.of(rs));
|
||||
rs.close();
|
||||
return templates;
|
||||
var sql = format("DROP TABLE IF EXISTS {0};",TABLE_TEMPLATES);
|
||||
db.prepareStatement(sql).execute();
|
||||
} catch (SQLException e) {
|
||||
throw databaseException("Failed to load templates for company {0}",companyId);
|
||||
throw databaseException("Failed to drop table {0}",TABLE_TEMPLATES);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,7 +427,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
|
||||
while (rs.next()) types.put(rs.getInt(ID),toType(rs));
|
||||
rs.close();
|
||||
|
||||
rs = Query.select(ALL).from(TABLE_DOCUMENTS).leftJoin(TEMPLATE_ID,TABLE_TEMPLATES, ID).where(TABLE_DOCUMENTS+"."+ ID,equal(docId)).exec(db);
|
||||
rs = Query.select(ALL).from(TABLE_DOCUMENTS).where(TABLE_DOCUMENTS+"."+ ID,equal(docId)).exec(db);
|
||||
Document doc = null;
|
||||
while (rs.next()) doc = toDoc(rs,types);
|
||||
rs.close();
|
||||
@@ -499,9 +496,8 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
|
||||
var timestamp = doc.date().atStartOfDay(UTC).toInstant().getEpochSecond();
|
||||
var sender = doc.sender();
|
||||
var custom = doc.customer();
|
||||
var templateId = doc.template() == null ? null : doc.template().id();
|
||||
var stmt = insertInto(TABLE_DOCUMENTS,TYPE_ID,COMPANY_ID, DATE, DELIVERY_DATE,FOOTER,HEAD, NUMBER, STATE, SENDER,TAX_NUMBER,BANK_ACCOUNT,COURT,CUSTOMER,CUSTOMER_EMAIL,CUSTOMER_NUMBER,CUSTOMER_TAX_NUMBER,TEMPLATE_ID,CURRENCY)
|
||||
.values(doc.type().id(),doc.companyId(),timestamp,doc.delivery(),doc.footer(),doc.head(),doc.number(),doc.state().code(),sender.name(),sender.taxNumber(),sender.bankAccount(),sender.court(),custom.name(),custom.email(),custom.id(),custom.taxNumber(),templateId, doc.currency())
|
||||
var stmt = insertInto(TABLE_DOCUMENTS,TYPE_ID,COMPANY_ID, DATE, DELIVERY_DATE,FOOTER,HEAD, NUMBER, STATE, SENDER,TAX_NUMBER,BANK_ACCOUNT,COURT,CUSTOMER,CUSTOMER_EMAIL,CUSTOMER_NUMBER,CUSTOMER_TAX_NUMBER,TEMPLATE,CURRENCY)
|
||||
.values(doc.type().id(),doc.companyId(),timestamp,doc.delivery(),doc.footer(),doc.head(),doc.number(),doc.state().code(),sender.name(),sender.taxNumber(),sender.bankAccount(),sender.court(),custom.name(),custom.email(),custom.id(),custom.taxNumber(),doc.template(), doc.currency())
|
||||
.execute(db);
|
||||
var rs = stmt.getGeneratedKeys();
|
||||
Long newId = null;
|
||||
@@ -523,10 +519,10 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
|
||||
var sender = doc.sender();
|
||||
var custom = doc.customer();
|
||||
update(TABLE_DOCUMENTS)
|
||||
.set(DATE, DELIVERY_DATE,FOOTER,HEAD, NUMBER, STATE, SENDER,TAX_NUMBER,BANK_ACCOUNT,COURT,CUSTOMER,CUSTOMER_EMAIL,CUSTOMER_NUMBER,CUSTOMER_TAX_NUMBER,TEMPLATE_ID)
|
||||
.set(DATE, DELIVERY_DATE,FOOTER,HEAD, NUMBER, STATE, SENDER,TAX_NUMBER,BANK_ACCOUNT,COURT,CUSTOMER,CUSTOMER_EMAIL,CUSTOMER_NUMBER,CUSTOMER_TAX_NUMBER,TEMPLATE)
|
||||
.where(ID,equal(doc.id()))
|
||||
.prepare(db)
|
||||
.apply(timestamp,doc.delivery(),doc.footer(),doc.head(),doc.number(),doc.state().code(),sender.name(),sender.taxNumber(),sender.bankAccount(),sender.court(),custom.name(),custom.email(),custom.id(),custom.taxNumber(),doc.template().id())
|
||||
.apply(timestamp,doc.delivery(),doc.footer(),doc.head(),doc.number(),doc.state().code(),sender.name(),sender.taxNumber(),sender.bankAccount(),sender.court(),custom.name(),custom.email(),custom.id(),custom.taxNumber(),doc.template())
|
||||
.close();
|
||||
sender.clean();
|
||||
custom.clean();
|
||||
@@ -635,23 +631,10 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
|
||||
var customerEmail = rs.getString(CUSTOMER_EMAIL);
|
||||
var customer = new Customer(customerId, customerName, customerEmail, customerTaxNumber,FALLBACK_LANG);
|
||||
var sender = new Sender(senderName,bankAccount,taxNumber,court);
|
||||
var template = toTemplate(rs);
|
||||
var template = rs.getString(TEMPLATE);
|
||||
return new Document(id,company,number,type,date, Document.State.of(state).orElse(State.ERROR),template,delivery,head,footer,currency, DEFAULT_THOUSANDS_SEPARATOR,sender,customer,new PositionList());
|
||||
}
|
||||
|
||||
private Template toTemplate(ResultSet rs) throws SQLException {
|
||||
try {
|
||||
var id = rs.getLong(TEMPLATE_ID);
|
||||
var company = rs.getLong(COMPANY_ID);
|
||||
var name = rs.getString(NAME);
|
||||
var data = rs.getBytes(TEMPLATE);
|
||||
if (id == 0) return new Template(0,company,"",null);
|
||||
return new Template(id,company,name,data);
|
||||
} catch (SQLException ignored){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private Position toPosition(ResultSet rs) throws SQLException {
|
||||
var num = rs.getInt(POS);
|
||||
var itemCode = rs.getString(ITEM_CODE);
|
||||
|
||||
Reference in New Issue
Block a user