package hu.user.lis.ui.converter;
import lombok.extern.log4j.Log4j2;
+import org.apache.logging.log4j.util.Strings;
import org.zkoss.bind.BindContext;
import org.zkoss.bind.Converter;
import org.zkoss.zk.ui.Component;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;
-import java.util.Objects;
@Log4j2
public class DoubleToStringConverter implements Converter<String, Double, Component> {
public Double coerceToBean(String data, Component listCell, BindContext bindContext) {
Double result = null;
try {
- if (Objects.nonNull(data)) {
- result = (Double) nf.parse(data.replace(" ", ""));
+ if (Strings.isNotBlank(data)) {
+ Number parsed = nf.parse(data.replace(" ", "").replace("-", ""));
+ result = parsed.doubleValue();
+ if (data.startsWith("-")) {
+ result = -1 * result;
+ }
}
} catch (Exception e) {
log.error("Can't parse {} to double type", data);
public static final String TREASURY = "~./editor/treasury-editor.zul";
public static final String ASSOCIATE = "~./editor/associate-editor.zul";
public static final String PARTNER = "~./editor/partner-editor.zul";
- public static final String PROJECT_ATTACH = "~./editor/project-executeActions.zul";
+ public static final String PROJECT_ATTACH = "~./editor/project-attach.zul";
public static final String IMPORT_INVOICE_ASSIGN = "~./editor/import-invoice-assign-editor.zul";
public static final String IMPORT_INVOICE_APPROVE = "~./editor/import-invoice-approve-editor.zul";
public static final String PROJECT = "~./editor/project-editor.zul";
<?import hu.user.lis.workflow.invoice.data.InvoiceImportStatus?>
-<?link rel="stylesheet" type="text/css" href="~./static/css/skeleton.css" ?>
-<?link rel="stylesheet" type="text/css" href="~./static/css/webclient.css" ?>
<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
-<zk>
+<zk xmlns:c="client/attribute" xmlns:w="client">
<zscript>
import hu.user.lis.db.Currency;
ListModelList currencies = new ListModelList(Currency.values());
<textbox hflex="true" instant="true"
value="@bind(vm.formDocument.title) @validator(vm)"
forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
- <hlayout>
- <label value="Partner"/>
- <entity-selector selector_id="approve_partner" entity="Partner"/>
- <button label="Szerkesztés" iconSclass="z-icon-edit"
- onClick="@command('onEditPartner')"
- disabled="@bind(not vm.canEditPartner)"/>
- </hlayout>
+
+ <label value="Partner"/>
+ <entity-selector selector_id="approve_partner" entity="Partner"/>
<hlayout>
<vlayout>
</vlayout>
<vlayout>
<label value="Nettó összeg"/>
- <doublebox readonly="false"
- value="@bind(vm.formDocument.netAmount) @validator(vm)"
- format="#,###.##" locale="hu"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
+ <textbox instant="true" sclass="number-box"
+ value="@bind(vm.formDocument.netAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
+ onChange="@command('onNetAmountChange')"
+ forward="onOK=submit.onClick, onCancel=cancel.onClick"
+ w:onBind="configureFloat(this.$n())"
+ c:onPaste="preventPastingNonDigit(event)"/>
</vlayout>
<vlayout>
<label value="Bruttó összeg"/>
- <doublebox readonly="false"
- value="@bind(vm.formDocument.grossAmount) @validator(vm)"
- format="#,###.##" locale="hu"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
+ <textbox instant="true" sclass="number-box"
+ value="@bind(vm.formDocument.grossAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
+ forward="onOK=submit.onClick, onCancel=cancel.onClick"
+ w:onBind="configureFloat(this.$n())"
+ c:onPaste="preventPastingNonDigit(event)"/>
</vlayout>
<vlayout>
- <label value="ÁFA"/>
- <doublebox readonly="false"
- value="@bind(vm.formDocument.vatAmount) @validator(vm)"
- format="#,###.##" locale="hu"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
+ <label value="ÁFA (HUF)"/>
+ <textbox instant="true" sclass="number-box"
+ value="@bind(vm.formDocument.vatAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
+ forward="onOK=submit.onClick, onCancel=cancel.onClick"
+ w:onBind="configureFloat(this.$n())"
+ c:onPaste="preventPastingNonDigit(event)"/>
</vlayout>
</hlayout>
<hlayout>
<textbox hflex="true" instant="true"
value="@bind(vm.formDocument.title) @validator(vm)"
forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
- <hlayout>
- <label value="Partner"/>
- <entity-selector selector_id="assign_partner" entity="Partner"/>
- <button label="Szerkesztés" iconSclass="z-icon-edit"
- onClick="@command('onEditPartner')"
- disabled="@bind(not vm.canEditPartner)"/>
- </hlayout>
+
+ <label value="Partner"/>
+ <entity-selector selector_id="assign_partner" entity="Partner"/>
<hlayout>
<vlayout>
</vlayout>
<vlayout>
<label value="Nettó összeg"/>
- <textbox style="text-align: right" instant="true"
+ <textbox instant="true" sclass="number-box"
value="@bind(vm.formDocument.netAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
onChange="@command('onNetAmountChange')"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
</vlayout>
<vlayout>
<label value="Bruttó összeg"/>
- <textbox style="text-align: right" instant="true"
+ <textbox instant="true" sclass="number-box"
value="@bind(vm.formDocument.grossAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
w:onBind="configureFloat(this.$n())"
</vlayout>
<vlayout>
<label value="ÁFA (HUF)"/>
- <textbox style="text-align: right" instant="true"
+ <textbox instant="true" sclass="number-box"
value="@bind(vm.formDocument.vatAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
w:onBind="configureFloat(this.$n())"
checked="@bind(vm.filterShowBoth)"/>
</toolbar>
</north>
- <center border="none" flex="true">
- <listbox vflex="true" model="@load(vm.projectsDataModel)"
- autopaging="true" pagingPosition="top" multiple="false"
- onSelect="@command('onListSelection')" onDoubleClick="@command('onEdit')">
- <listhead sizable="true">
- <listheader label="Azonosító" sort="auto(humanId)" align="left"
- sortDirection="@load(vm.cols['humanId'].sortDirection)"/>
- <listheader label="Ügyfél" sort="auto(partner.name)" align="left"
- sortDirection="@load(vm.cols['partner.name'].sortDirection)"/>
- <listheader label="Státusz" sort="auto(projectStatus.name)" align="left"
- sortDirection="@load(vm.cols['projectStatus.name'].sortDirection)"/>
- <listheader label="Megnevezés" sort="auto(name)" align="left"
- sortDirection="@load(vm.cols['name'].sortDirection)"/>
- <listheader label="Kapcsolattartó" sort="auto(contactName)" align="left"
- sortDirection="@load(vm.cols['contactName'].sortDirection)"/>
- <listheader label="Aktív" sort="auto(active)" align="left"
- sortDirection="@load(vm.cols['active'].sortDirection)"/>
- </listhead>
- <template name="model">
- <listitem>
- <listcell label="@load(each.humanId)"/>
- <listcell label="@load(each.partner.name)"/>
- <listcell label="@load(each.projectStatus.name)"/>
- <listcell label="@load(each.name)"/>
- <listcell label="@load(each.contactName)"/>
- <listcell>
- <a iconSclass="z-icon-check" visible="@load(each.active)"/>
- <a iconSclass="z-icon-ban" visible="@load(!each.active)"/>
- </listcell>
- </listitem>
- </template>
- </listbox>
+ <center border="none">
+ <vlayout vflex="true">
+ <menupopup id="editPopup"
+ children="@bind(vm.projectsDataModel.renderer.columnSettings) @template('menu-item')">
+ <template name="menu-item" var="node">
+ <menuitem label="@load(node.label)" checked="@load(node.visible)"
+ onClick="@command('onHeaderMenuClicked', node=node)"/>
+ </template>
+ </menupopup>
+ <listbox vflex="true" model="@load(vm.projectsDataModel)" multiple="false"
+ itemRenderer="@load(vm.projectsDataModel.renderer)" onSelect="@command('onListSelection')">
+ <listhead sizable="true" menupopup="editPopup"
+ onColSize="@command('onHeaderSizeChanged', node=node)"
+ children="@bind(vm.projectsDataModel.renderer.columnSettings) @template('head-item')">
+ <template name="head-item" var="node">
+ <listheader label="@load(node.label)" sort="@load(node.sort)" align="@load(node.align)"
+ visible="@load(node.visible)" width="@load(node.width)" draggable="head"
+ droppable="head" sortDirection="@load(node.sortDirection)"
+ onDrop="@command('onHeaderReorder')"/>
+ </template>
+ </listhead>
+ <template name="model">
+ <listitem onDoubleClick="@command('onEdit')">
+ <listcell label="@load(each.humanId)"/>
+ <listcell label="@load(each.partner.name)"/>
+ <listcell label="@load(each.projectStatus.name)"/>
+ <listcell label="@load(each.name)"/>
+ <listcell label="@load(each.contactName)"/>
+ <listcell>
+ <a iconSclass="z-icon-check" visible="@load(each.active)"/>
+ <a iconSclass="z-icon-ban" visible="@load(!each.active)"/>
+ </listcell>
+ </listitem>
+ </template>
+ </listbox>
+ </vlayout>
+
</center>
<south border="none" flex="true" style="text-align: right; padding: 10px">
<hlayout>
</toolbar>
</north>
<west title="Fájlok" size="160px" flex="true" border="none" splittable="true" collapsible="true">
- <div id="attachment" hflex="true" vflex="true">
- <listbox vflex="true" hflex="true" model="@load(vm.entityDocumentDataModel)"
- multiple="false"
- sizedByContent="true" onSelect="@command(vm.entityDocumentDataModel.onSelectionChanged())">
- <listhead visible="false">
- <listheader hflex="true" align="center"/>
- </listhead>
- <template name="model">
- <listitem>
- <listcell iconSclass="z-icon-file-pdf-o" style="font-size: 1.5em">
- <vlayout>
- <label value="@load(each.name)"/>
- </vlayout>
- </listcell>
- </listitem>
- </template>
- </listbox>
- <!-- anchor="${attachment}"-->
- <dropupload native="true" detection="none" hflex="true" vflex="true" style="background: red"
- onUpload="@command('doUploadFiles', files=event.medias)">
- <attribute name="content">
- <![CDATA[
- <div style="text-align: center; border: 3px solid green;">
- <b>Drop here to upload!</b>
- </div>
- ]]>
- </attribute>
- </dropupload>
- </div>
+ <listbox vflex="true" hflex="true" model="@load(vm.entityDocumentDataModel)"
+ multiple="false"
+ sizedByContent="true" onSelect="@command(vm.entityDocumentDataModel.onSelectionChanged())">
+ <listhead visible="false">
+ <listheader hflex="true" align="center"/>
+ </listhead>
+ <template name="model">
+ <listitem>
+ <listcell iconSclass="z-icon-file-pdf-o" style="font-size: 1.5em">
+ <vlayout>
+ <label value="@load(each.name)"/>
+ </vlayout>
+ </listcell>
+ </listitem>
+ </template>
+ </listbox>
</west>
<center border="none" hflex="true" vflex="true">
<iframe hflex="true" vflex="true"
content="@load(vm.entityDocumentDataModel.selectedDocument.file) @converter('hu.user.lis.ui.converter.ByteArrayToAMediaConverter')"/>
</center>
+ <east>
+ <!-- <div id="attachment" hflex="true" vflex="true">-->
+ <!-- </div>-->
+ <!-- anchor="${attachment}"-->
+ <dropupload native="true" detection="none" hflex="true" vflex="true" style="background: red"
+ onUpload="@command('doUploadFiles', files=event.medias)">
+ <attribute name="content">
+ <![CDATA[
+ <div style="text-align: center; border: 3px solid green;">
+ <b>Drop here to upload!</b>
+ </div>
+ ]]>
+ </attribute>
+ </dropupload>
+ </east>
</borderlayout>
</zk>
\ No newline at end of file
<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
<zk xmlns:c="client/attribute" xmlns:w="client">
- <script src="~./static/js/clipboard.utils.js"/>
<zscript>
import hu.user.lis.db.Currency;
ListModelList currencies = new ListModelList(Currency.values());
value="@bind(vm.formDocument.title) @validator(vm)"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
disabled="@bind(vm.readonlyForm)"/>
+
<label value="Partner"/>
- <entity-selector selector_id="invoice_partner" entity="Partner" readonly="${vm.readonlyForm}"/>
+ <entity-selector selector_id="invoice_partner" entity="Partner"/>
+ <!-- <button label="Szerkesztés" iconSclass="z-icon-edit"-->
+ <!-- onClick="@command('onEditPartner')"-->
+ <!-- disabled="@bind(not vm.canEditPartner)"/>-->
<hlayout>
<vlayout>
<label value="Sorszám"/>
</vlayout>
<vlayout>
<label value="Nettó összeg"/>
- <textbox style="text-align: right" instant="true"
+ <textbox instant="true" sclass="number-box"
value="@bind(vm.formDocument.netAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
onChange="@command('onNetAmountChange')"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"
w:onBind="configureFloat(this.$n())"
- c:onPaste="preventPastingNonDigit(event)"/>
+ c:onPaste="preventPastingNonDigit(event)"
+ disabled="@bind(vm.readonlyForm)"/>
</vlayout>
<vlayout>
<label value="Bruttó összeg"/>
- <textbox style="text-align: right" instant="true"
+ <textbox instant="true" sclass="number-box"
value="@bind(vm.formDocument.grossAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"
w:onBind="configureFloat(this.$n())"
- c:onPaste="preventPastingNonDigit(event)"/>
+ c:onPaste="preventPastingNonDigit(event)"
+ disabled="@bind(vm.readonlyForm)"/>
</vlayout>
<vlayout>
<label value="ÁFA (HUF)"/>
- <textbox style="text-align: right" instant="true"
+ <textbox instant="true" sclass="number-box"
value="@bind(vm.formDocument.vatAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"
w:onBind="configureFloat(this.$n())"
- c:onPaste="preventPastingNonDigit(event)"/>
+ c:onPaste="preventPastingNonDigit(event)"
+ disabled="@bind(vm.readonlyForm)"/>
</vlayout>
</hlayout>
<hlayout>
<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
-<zk xmlns:c="client/attribute" xmlns:w="client">
- <zscript>
- import hu.user.lis.db.Currency;
- ListModelList currencies = new ListModelList(Currency.values());
- </zscript>
+<zk>
<tabbox vflex="true" hflex="true">
<tabs>
<tab label="Adatok" selected="true"/>
<tabpanels>
<tabpanel>
<vlayout hflex="true">
- <hlayout>
- <vlayout hflex="min">
- <label value="Projekt"/>
- <hlayout>
- <label value="@bind(vm.formDocument.project.humanId)"/>
- <separator/>
- <label value="@bind(vm.formDocument.project.name)"/>
- </hlayout>
- </vlayout>
- </hlayout>
- <label value="Leírás"/>
- <textbox hflex="true" instant="true"
- value="@bind(vm.formDocument.title) @validator(vm)"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"/>
<label value="Partner"/>
- <entity-selector selector_id="inv_editor_partner" entity="Partner" readonly="${vm.readonlyForm}"/>
- <hlayout>
- <vlayout>
- <label value="Sorszám"/>
- <textbox instant="true" value="@bind(vm.formDocument.humanId) @validator(vm)"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"/>
- </vlayout>
- <vlayout>
- <label value="Pénznem"/>
- <combobox instant="true" model="${currencies}"
- selectedItem="@bind(vm.formDocument.currency) @validator(vm)"
- onChange="@command('onNetAmountChange')"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"/>
-
- </vlayout>
- <vlayout>
- <label value="Nettó összeg"/>
- <textbox style="text-align: right" instant="true"
- value="@bind(vm.formDocument.netAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
- onChange="@command('onNetAmountChange')"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"
- w:onBind="configureFloat(this.$n())"
- c:onPaste="preventPastingNonDigit(event)"/>
- </vlayout>
- <vlayout>
- <label value="Bruttó összeg"/>
- <textbox style="text-align: right" instant="true"
- value="@bind(vm.formDocument.grossAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"
- w:onBind="configureFloat(this.$n())"
- c:onPaste="preventPastingNonDigit(event)"/>
- </vlayout>
- <vlayout>
- <label value="ÁFA (HUF)"/>
- <textbox style="text-align: right" instant="true"
- value="@bind(vm.formDocument.vatAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"
- w:onBind="configureFloat(this.$n())"
- c:onPaste="preventPastingNonDigit(event)"/>
- </vlayout>
- </hlayout>
- <hlayout>
- <vlayout>
- <label value="Kiállítás dátuma"/>
- <datebox instant="true" format="yyyy. MM. dd."
- value="@bind(vm.formDocument.createDate) @validator(vm)"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"/>
- </vlayout>
- <vlayout>
- <label value="Teljesítés dátuma"/>
- <datebox instant="true" format="yyyy. MM. dd."
- value="@bind(vm.formDocument.completionDate) @validator(vm)"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"/>
- </vlayout>
- <vlayout>
- <label value="Fizetési határidő"/>
- <datebox instant="true" format="yyyy. MM. dd."
- value="@bind(vm.formDocument.paymentDeadline) @validator(vm)"
- forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"/>
- </vlayout>
- </hlayout>
- <hlayout>
- <vlayout>
- <label value="Tervezett"/>
- <checkbox mold="switch" checked="@bind(vm.formDocument.planned)"
- disabled="@bind(vm.readonlyForm)"/>
- </vlayout>
- <vlayout>
- <label value="Fizetve"/>
- <checkbox mold="switch" checked="@bind(vm.formDocument.paid)"
- disabled="@bind(vm.readonlyForm)"/>
- </vlayout>
- </hlayout>
+ <entity-selector selector_id="invoice_partner" entity="Partner"/>
+ <!-- <vlayout hflex="true">-->
+ <!-- <label value="Projekt"/>-->
+ <!-- <hlayout>-->
+ <!-- <label value="@bind(vm.formDocument.project.humanId)"/>-->
+ <!-- <separator/>-->
+ <!-- <label value="@bind(vm.formDocument.project.name)"/>-->
+ <!-- </hlayout>-->
+ <!-- </vlayout>-->
+ <include src="~./form/invoice-data-form.zul"/>
</vlayout>
</tabpanel>
<tabpanel>
-<zk>
+<zk xmlns:c="client/attribute" xmlns:w="client">
<style>
.z-bandbox-input[disabled], .z-combobox-input[disabled], .z-datebox-input[disabled], .z-textbox[disabled],
.z-decimalbox[disabled], .z-intbox[disabled], .z-longbox[disabled], .z-doublebox[disabled]
<hbox hflex="true" vflex="true" visible="@load(vm.formDocument)">
<window title="Számla adatok" hflex="true" vflex="true" border="normal" style="margin: 10px">
- <!-- <include src="~./form/invoice-form.zul"/>-->
<vlayout hflex="true">
<vlayout hflex="true">
<label value="Projekt"/>
autopaging="true" pagingPosition="top" multiple="false">
<listhead sizable="true">
<listheader label="Dátum" align="left" hflex="true"/>
- <!-- <listheader label="Nettó összeg" align="right"/>-->
<listheader label="Bruttó összeg" align="right" hflex="true"/>
- <!-- <listheader label="ÁFA összeg" align="right" hflex="true"/>-->
<listheader label="Törlés" align="right" hflex="min"/>
</listhead>
<template name="model">
format="yyyy. MM. dd." inplace="true" width="100%"
onChange="@command('onPaymentChanged', entity=each)"/>
</listcell>
- <!-- <listcell>-->
- <!-- <doublebox value="@bind(each.netAmount)"-->
- <!-- format="#,###.##" locale="hu" inplace="true" width="100%"-->
- <!-- onChange="@command('onPaymentChanged', entity=each)"/>-->
- <!-- </listcell>-->
<listcell>
- <doublebox value="@bind(each.grossAmount)"
- format="#,###.##" locale="hu" inplace="true" instant="true"
- width="100%"
- onChange="@command('onPaymentChanged', entity=each)"/>
+ <textbox instant="true" inplace="true" sclass="number-box" width="100%"
+ value="@bind(each.grossAmount) @validator(vm) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"
+ onChange="@command('onPaymentChanged', entity=each)"
+ w:onBind="configureFloat(this.$n())"
+ c:onPaste="preventPastingNonDigit(event)"
+ disabled="@bind(vm.readonlyForm)"/>
</listcell>
<listcell>
<button iconSclass="z-icon-remove"
<toolbar>
<toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit" onClick="@command('onEdit')"
disabled="@load(empty vm.selectedEntity)"/>
- <toolbarbutton label="Projekt módosítás" iconSclass="z-icon-forward"
- onClick="@command('onChangeProject')" disabled="@load(empty vm.selectedEntity)"/>
+ <!-- <toolbarbutton label="Projekt módosítás" iconSclass="z-icon-forward"-->
+ <!-- onClick="@command('onChangeProject')" disabled="@load(empty vm.selectedEntity)"/>-->
<toolbarbutton label="Számla kiegyenlítés" iconSclass="z-icon-credit-card"
onClick="@command('onInvoicePayment')"
disabled="@load(empty vm.selectedEntity || vm.selectedEntity.planned)"/>
+.number-box {
+ text-align: right;
+ width: 100px;
+}
.list-title {
font-size: 1.5em;
font-weight: bold;