diff --git a/database/BSK.db b/database/BSK.db index 3937548..39b3566 100644 Binary files a/database/BSK.db and b/database/BSK.db differ diff --git a/src/main/java/BsK/client/LocalStorage.java b/src/main/java/BsK/client/LocalStorage.java index 91d10a2..f749397 100644 --- a/src/main/java/BsK/client/LocalStorage.java +++ b/src/main/java/BsK/client/LocalStorage.java @@ -26,6 +26,7 @@ public class LocalStorage { public static Date dataDialogFromDate = new Date(); public static Date dataDialogToDate = new Date(); public static String dataDialogDoctorName = "Tất cả"; + public static String dataDialogIdSearchTerm = ""; public static List doctorsName = new ArrayList<>(); public static String[] provinces = new String[]{}; diff --git a/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java b/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java index dc0772d..313630c 100644 --- a/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java +++ b/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java @@ -4833,6 +4833,10 @@ public class CheckUpPage extends JPanel { recheckupDatePickerButton.setEnabled(false); } + templateTitle = null; + photoNum = 0; + orientationComboBox.setSelectedItem("ngang"); + medicinePrescription = new String[0][0]; servicePrescription = new String[0][0]; updatePrescriptionTree(); diff --git a/src/main/java/BsK/client/ui/component/CheckUpPage/PrintDialog/UltrasoundResult.java b/src/main/java/BsK/client/ui/component/CheckUpPage/PrintDialog/UltrasoundResult.java index 34c17e5..dbb87c6 100644 --- a/src/main/java/BsK/client/ui/component/CheckUpPage/PrintDialog/UltrasoundResult.java +++ b/src/main/java/BsK/client/ui/component/CheckUpPage/PrintDialog/UltrasoundResult.java @@ -289,7 +289,7 @@ public class UltrasoundResult { parameters.put("doctorName", this.doctorName); parameters.put("ultrasoundDoctorName", this.ultrasoundDoctorName); parameters.put("checkupDate", this.checkupDate); - parameters.put("barcodeNumber", this.checkupId); + parameters.put("id", this.checkupId); // RTF and plain text content parameters.put("checkupNote", this.rtfContent != null ? this.rtfContent : ""); @@ -305,6 +305,23 @@ public class UltrasoundResult { // Template title parameters.put("templateTitle", this.templateTitle); + + try { + // Generate barcode and get file path + String barcodePath = BarcodeGenerator.generateCode128WithFixedName(this.checkupId, 200, 50, "invoice_barcode"); + parameters.put("barcodeNumber", barcodePath); + + // Generate QR code for the driveURL + String qrcodePath = BarcodeGenerator.generateQRCodeWithFixedName(this.driveUrl, 220, 220, "invoice_qrcode"); + parameters.put("driveURL", qrcodePath); + + } catch (Exception e) { + log.error("Error generating barcode/QR code images: {}", e.getMessage()); + // Set fallback parameters as null or empty if image generation fails + parameters.put("barcodeNumber", null); + parameters.put("driveURL", null); + } + // Extra safety: Ensure no parameter is null or "null" string for (String key : parameters.keySet()) { @@ -318,7 +335,7 @@ public class UltrasoundResult { int numberOfImages = this.selectedImages.size(); parameters.put("numberImage", numberOfImages); - parameters.put("logoImage", System.getProperty("user.dir") + "/src/main/java/BsK/client/ui/assets/icon/logo.jpg"); + for (int i = 0; i < 6; i++) { if (i < numberOfImages) { @@ -328,8 +345,6 @@ public class UltrasoundResult { } } - // Google Drive URL for QR code generation - parameters.put("driveURL", this.driveUrl); // Load pre-compiled report or compile JRXML as fallback JasperReport jasperReport = loadCompiledReport(reportName); diff --git a/src/main/java/BsK/client/ui/component/DataDialog/DataDialog.java b/src/main/java/BsK/client/ui/component/DataDialog/DataDialog.java index c4c7b81..39eae89 100644 --- a/src/main/java/BsK/client/ui/component/DataDialog/DataDialog.java +++ b/src/main/java/BsK/client/ui/component/DataDialog/DataDialog.java @@ -32,6 +32,7 @@ public class DataDialog extends JDialog { // private JTextField searchField; + private JTextField idSearchField; private JComboBox doctorComboBox; private JSpinner fromDateSpinner; private JSpinner toDateSpinner; @@ -151,6 +152,14 @@ public class DataDialog extends JDialog { } else { doctorComboBox.setSelectedIndex(0); } + + if (LocalStorage.dataDialogIdSearchTerm != null && !LocalStorage.dataDialogIdSearchTerm.isEmpty()) { + idSearchField.setText(LocalStorage.dataDialogIdSearchTerm); + idSearchField.setForeground(Color.BLACK); + } else { + idSearchField.setText("Tìm theo mã phiếu khám..."); + idSearchField.setForeground(Color.GRAY); + } } private JPanel createControlPanel() { @@ -221,6 +230,27 @@ public class DataDialog extends JDialog { bottomRow.add(Box.createHorizontalStrut(20)); bottomRow.add(new JLabel("Bác sĩ:")); + bottomRow.add(Box.createHorizontalStrut(15)); // Thêm khoảng cách + bottomRow.add(new JLabel("Mã Phiếu:")); + idSearchField = new JTextField("Tìm theo mã phiếu khám...", 12); // Tạo field mới + idSearchField.setForeground(Color.GRAY); + idSearchField.setPreferredSize(new Dimension(150, 25)); + idSearchField.addFocusListener(new java.awt.event.FocusAdapter() { + public void focusGained(java.awt.event.FocusEvent evt) { + if (idSearchField.getText().equals("Tìm theo mã phiếu khám...")) { + idSearchField.setText(""); + idSearchField.setForeground(Color.BLACK); + } + } + public void focusLost(java.awt.event.FocusEvent evt) { + if (idSearchField.getText().isEmpty()) { + idSearchField.setText("Tìm theo mã phiếu khám..."); + idSearchField.setForeground(Color.GRAY); + } + } + }); + bottomRow.add(idSearchField); + doctorComboBox = new JComboBox<>(); doctorComboBox.addItem("Tất cả"); if (LocalStorage.doctorsName != null) { @@ -251,7 +281,7 @@ public class DataDialog extends JDialog { }); getAllButton.addActionListener(e -> { - GetCheckupDataRequest request = new GetCheckupDataRequest(null, null, null, null, 1, recordsPerPage); + GetCheckupDataRequest request = new GetCheckupDataRequest(null, null,null, null, null, 1, recordsPerPage); NetworkUtil.sendPacket(ClientHandler.ctx.channel(), request); resultCountLabel.setText("Đang tải tất cả dữ liệu..."); }); @@ -266,7 +296,7 @@ public class DataDialog extends JDialog { resultCountLabel.setFont(new Font("Arial", Font.PLAIN, 12)); gridPanel.add(resultCountLabel, BorderLayout.NORTH); - String[] columnNames = {"STT", "Mã BN", "Họ và Tên", "Năm sinh", "Giới tính", "Ngày khám", "Bác sĩ khám", "Chẩn đoán", "Kết luận", "Hành động"}; + String[] columnNames = {"STT", "Mã khám", "Họ và Tên", "Năm sinh", "Giới tính", "Ngày khám", "Bác sĩ khám", "Chẩn đoán", "Kết luận", "Hành động"}; tableModel = new DefaultTableModel(columnNames, 0) { @Override public boolean isCellEditable(int row, int column) { @@ -301,6 +331,18 @@ public class DataDialog extends JDialog { searchTerm = null; } + String checkupIdSearch = idSearchField.getText(); + if (checkupIdSearch == null || checkupIdSearch.equals("Tìm theo mã phiếu khám...") || checkupIdSearch.trim().isEmpty()) { + checkupIdSearch = null; + } + + // Ưu tiên tìm theo Mã phiếu khám. Nếu có, bỏ qua tìm kiếm chung. + if (checkupIdSearch != null) { + searchTerm = null; + searchField.setText("Tìm theo tên bệnh nhân, mã bệnh nhân..."); + searchField.setForeground(Color.GRAY); + } + Date fromDate = (Date) fromDateSpinner.getValue(); Date toDate = (Date) toDateSpinner.getValue(); @@ -335,7 +377,7 @@ public class DataDialog extends JDialog { } } - GetCheckupDataRequest request = new GetCheckupDataRequest(searchTerm, fromTimestamp, toTimestamp, doctorId, page, recordsPerPage); + GetCheckupDataRequest request = new GetCheckupDataRequest(searchTerm, checkupIdSearch, fromTimestamp, toTimestamp, doctorId, page, recordsPerPage); NetworkUtil.sendPacket(ClientHandler.ctx.channel(), request); resultCountLabel.setText("Đang tải dữ liệu cho trang " + page + "..."); @@ -488,6 +530,12 @@ public class DataDialog extends JDialog { } else { LocalStorage.dataDialogSearchTerm = searchTerm; } + String idSearchTerm = idSearchField.getText(); + if (idSearchTerm.equals("Tìm theo mã phiếu khám...")) { + LocalStorage.dataDialogIdSearchTerm = ""; + } else { + LocalStorage.dataDialogIdSearchTerm = idSearchTerm; + } LocalStorage.dataDialogFromDate = (Date) fromDateSpinner.getValue(); LocalStorage.dataDialogToDate = (Date) toDateSpinner.getValue(); @@ -507,10 +555,11 @@ public class DataDialog extends JDialog { LocalStorage.dataDialogFromDate = today; LocalStorage.dataDialogToDate = today; LocalStorage.dataDialogDoctorName = "Tất cả"; + LocalStorage.dataDialogIdSearchTerm = ""; } class ActionButtonRenderer extends JPanel implements TableCellRenderer { - private JButton editButton, deleteButton; + private JButton editButton; public ActionButtonRenderer() { setLayout(new FlowLayout(FlowLayout.CENTER, 2, 2)); @@ -521,20 +570,11 @@ public class DataDialog extends JDialog { } editButton = new JButton(editIcon); - ImageIcon deleteIcon = new ImageIcon("src/main/java/BsK/client/ui/assets/icon/delete.png"); - if (deleteIcon.getImage() != null) { - deleteIcon.setImage(deleteIcon.getImage().getScaledInstance(16, 16, Image.SCALE_SMOOTH)); - } - deleteButton = new JButton(deleteIcon); - editButton.setPreferredSize(new Dimension(30, 25)); - deleteButton.setPreferredSize(new Dimension(30, 25)); editButton.setToolTipText("Sửa"); - deleteButton.setToolTipText("Xóa"); add(editButton); - add(deleteButton); } @Override @@ -550,7 +590,7 @@ public class DataDialog extends JDialog { class ActionButtonEditor extends DefaultCellEditor { private JPanel panel; - private JButton editButton, deleteButton; + private JButton editButton; public ActionButtonEditor(JDialog parentDialog) { super(new JCheckBox()); @@ -562,14 +602,7 @@ public class DataDialog extends JDialog { } editButton = new JButton(editIcon); - ImageIcon deleteIcon = new ImageIcon("src/main/java/BsK/client/ui/assets/icon/delete.png"); - if (deleteIcon.getImage() != null) { - deleteIcon.setImage(deleteIcon.getImage().getScaledInstance(16, 16, Image.SCALE_SMOOTH)); - } - deleteButton = new JButton(deleteIcon); - editButton.setPreferredSize(new Dimension(30, 25)); - deleteButton.setPreferredSize(new Dimension(30, 25)); editButton.addActionListener(e -> { fireEditingStopped(); @@ -598,25 +631,9 @@ public class DataDialog extends JDialog { } }); - deleteButton.addActionListener(e -> { - fireEditingStopped(); - int row = dataTable.getSelectedRow(); - if (row < 0) return; - String patientId = (String) tableModel.getValueAt(row, 1); - int result = JOptionPane.showConfirmDialog(parentDialog, - "Bạn có chắc chắn muốn xóa phiếu khám của bệnh nhân " + patientId + " không?", - "Xác nhận xóa", - JOptionPane.YES_NO_OPTION, - JOptionPane.WARNING_MESSAGE); - if (result == JOptionPane.YES_OPTION) { - tableModel.removeRow(row); - JOptionPane.showMessageDialog(parentDialog, "Đã xóa phiếu khám thành công!", "Thông báo", JOptionPane.INFORMATION_MESSAGE); - } - }); panel.add(editButton); - panel.add(deleteButton); } @Override diff --git a/src/main/java/BsK/common/packet/req/GetCheckupDataRequest.java b/src/main/java/BsK/common/packet/req/GetCheckupDataRequest.java index 3daeb79..a78e6bc 100644 --- a/src/main/java/BsK/common/packet/req/GetCheckupDataRequest.java +++ b/src/main/java/BsK/common/packet/req/GetCheckupDataRequest.java @@ -10,6 +10,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class GetCheckupDataRequest implements Packet { private String searchTerm; + private String checkupIdSearch; private Long fromDate; // Use Long for timestamp private Long toDate; // Use Long for timestamp private Integer doctorId; diff --git a/src/main/java/BsK/common/util/text/TextUtils.java b/src/main/java/BsK/common/util/text/TextUtils.java index d34d444..5e6f67e 100644 --- a/src/main/java/BsK/common/util/text/TextUtils.java +++ b/src/main/java/BsK/common/util/text/TextUtils.java @@ -150,7 +150,7 @@ public final class TextUtils { // The font size in RTF is in half-points. JTextPane seems to generate // sizes that are double what is visually represented. Dividing by 2 // brings it to the expected point size for JasperReports. - int newSize = originalSize / 2; + int newSize = (int) (originalSize / 1.5); // Append the replacement string. We need to escape the backslash for appendReplacement. matcher.appendReplacement(sb, "\\\\fs" + newSize); diff --git a/src/main/java/BsK/server/network/handler/ServerHandler.java b/src/main/java/BsK/server/network/handler/ServerHandler.java index ec9430b..8268576 100644 --- a/src/main/java/BsK/server/network/handler/ServerHandler.java +++ b/src/main/java/BsK/server/network/handler/ServerHandler.java @@ -1368,8 +1368,20 @@ public class ServerHandler extends SimpleChannelInboundHandler params = new java.util.ArrayList<>(); boolean hasWhere = false; - - if (getCheckupDataRequest.getSearchTerm() != null && !getCheckupDataRequest.getSearchTerm().trim().isEmpty()) { + + String checkupIdSearch = getCheckupDataRequest.getCheckupIdSearch(); + if (checkupIdSearch != null && !checkupIdSearch.trim().isEmpty()) { + whereClause.append("WHERE a.checkup_id = ?"); + try { + // Chuyển đổi sang kiểu số để tìm kiếm chính xác và an toàn + params.add(Integer.parseInt(checkupIdSearch.trim())); + } catch (NumberFormatException e) { + // Nếu người dùng nhập chữ, ta truyền một giá trị không thể tìm thấy để trả về 0 kết quả + params.add(-1); + } + hasWhere = true; + } + else if (getCheckupDataRequest.getSearchTerm() != null && !getCheckupDataRequest.getSearchTerm().trim().isEmpty()) { whereClause.append("WHERE (LOWER(c.customer_first_name) LIKE ? OR LOWER(c.customer_last_name) LIKE ? OR " + "LOWER(CONCAT(c.customer_last_name, ' ', c.customer_first_name)) LIKE ? OR c.customer_number LIKE ?)"); String searchTerm = "%" + getCheckupDataRequest.getSearchTerm().toLowerCase().trim() + "%"; diff --git a/src/main/resources/print_forms/ultrasoundresult.jrxml b/src/main/resources/print_forms/ultrasoundresult.jrxml index 2cc8225..651b0a1 100644 --- a/src/main/resources/print_forms/ultrasoundresult.jrxml +++ b/src/main/resources/print_forms/ultrasoundresult.jrxml @@ -39,6 +39,7 @@ + @@ -47,16 +48,13 @@ <detail> <band height="538" splitType="Stretch"> <element kind="frame" uuid="2b7ec588-953c-4145-87b7-1d861c272fe0" x="0" y="0" width="399" height="538"> - <element kind="image" uuid="fd80ab38-4cae-409b-84b9-356220d2b1e5" x="0" y="1" width="60" height="60"> - <expression><![CDATA[$P{logoImage}]]></expression> - </element> - <element kind="textField" uuid="eb56d4c8-2a0d-45fa-89a2-ad6528f9a99b" x="60" y="0" width="260" height="20" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true" hTextAlign="Center"> + <element kind="textField" uuid="eb56d4c8-2a0d-45fa-89a2-ad6528f9a99b" x="2" y="0" width="287" height="20" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true" hTextAlign="Center"> <expression><![CDATA[$P{clinicPrefix}]]></expression> </element> - <element kind="textField" uuid="796d9ffd-6d2e-4ae3-bdfb-b08183d7d9c0" x="63" y="30" width="229" height="20" fontName="Times New Roman" fontSize="10.0"> + <element kind="textField" uuid="796d9ffd-6d2e-4ae3-bdfb-b08183d7d9c0" x="2" y="30" width="287" height="20" fontName="Times New Roman" fontSize="10.0"> <expression><![CDATA[$P{clinicAddress}]]></expression> </element> - <element kind="textField" uuid="260bb33d-1d11-4178-aceb-3fbf8fcb4b45" x="63" y="42" width="162" height="12" fontName="Times New Roman" fontSize="8.0"> + <element kind="textField" uuid="260bb33d-1d11-4178-aceb-3fbf8fcb4b45" x="2" y="42" width="287" height="12" fontName="Times New Roman" fontSize="8.0"> <expression><![CDATA["SDT: " + $P{clinicPhone}]]></expression> </element> <element kind="staticText" uuid="6f89a93f-2d10-4506-baa5-226bdd047b17" x="0" y="65" width="100" height="30" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true"> @@ -134,16 +132,11 @@ <element kind="textField" uuid="6b0b21be-2ca3-4594-bbe9-34868e13eb1e" x="45" y="150" width="55" height="16" fontName="Times New Roman" fontSize="10.0"> <expression><![CDATA[$P{checkupBloodPressure} +" mmHg"]]></expression> </element> - <element kind="component" uuid="e8842007-3343-4399-a101-76a302d0755d" x="354" y="1" width="44" height="37"> - <component kind="barcode4j:QRCode"> - <codeExpression><![CDATA[$P{driveURL}]]></codeExpression> - </component> - </element> <element kind="textField" uuid="9763a634-05c2-4f64-a903-c914455b7ee6" x="70" y="60" width="282" height="22" forecolor="#FF0905" fontName="Times New Roman" fontSize="12.0" bold="true" hTextAlign="Center"> <printWhenExpression><![CDATA[$P{templateTitle} != null && !$P{templateTitle}.trim().isEmpty()]]></printWhenExpression> <expression><![CDATA["PHIẾU " + $P{templateTitle}]]></expression> </element> - <element kind="textField" uuid="40902efd-728a-46df-8432-f4a5798a4ee3" x="60" y="13" width="260" height="20" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true" hTextAlign="Center"> + <element kind="textField" uuid="40902efd-728a-46df-8432-f4a5798a4ee3" x="2" y="13" width="287" height="20" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true" hTextAlign="Center"> <expression><![CDATA[$P{clinicName}]]></expression> </element> </element> @@ -169,11 +162,6 @@ <element kind="textField" uuid="e90ad772-4425-482d-9e75-f2bc66b9084d" x="0" y="358" width="400" height="70" fontName="Times New Roman" fontSize="12.0" bold="true"> <expression><![CDATA[$P{checkupConclusion}]]></expression> </element> - <element kind="component" uuid="cb28d811-1328-45dc-9461-cfbb88b7eeae" x="-105" y="30" width="59" height="32"> - <component kind="barcode4j:Code128"> - <codeExpression><![CDATA[$P{barcodeNumber}]]></codeExpression> - </component> - </element> <element kind="textField" uuid="d63165c2-19e2-43ad-8a3f-004e00bffdfe" x="0" y="450" width="240" height="66" fontName="Times New Roman" fontSize="12.0"> <expression><![CDATA[$P{checkupSuggestion}]]></expression> </element> @@ -264,10 +252,19 @@ <expression><![CDATA[$P{image1}]]></expression> </element> </element> - <element kind="staticText" uuid="8f35aa72-22a4-45f0-a35e-8e35e832404e" x="-46" y="39" width="44" height="21" fontName="Times New Roman" fontSize="8.0" bold="false" hTextAlign="Center"> + <element kind="staticText" uuid="8f35aa72-22a4-45f0-a35e-8e35e832404e" x="-48" y="54" width="44" height="21" fontName="Times New Roman" fontSize="8.0" bold="true" hTextAlign="Center"> <printWhenExpression><![CDATA[$P{driveURL} != null && !$P{driveURL}.trim().isEmpty()]]></printWhenExpression> <text><![CDATA[Xem KQ online]]></text> </element> + <element kind="textField" uuid="6d7df7cd-924f-4306-bcea-d643f7a977f0" x="-111" y="42" width="60" height="12" fontName="Times New Roman" fontSize="8.0" hTextAlign="Center"> + <expression><![CDATA[$P{id}]]></expression> + </element> + <element kind="image" uuid="16aab6b9-7618-451e-ae48-8bf7bd857bbc" x="-111" y="13" width="61" height="29"> + <expression><![CDATA[$P{barcodeNumber}]]></expression> + </element> + <element kind="image" uuid="14220495-3e07-4322-9c5f-ebf98a8083c8" x="-50" y="3" width="48" height="48"> + <expression><![CDATA[$P{driveURL}]]></expression> + </element> </element> </band> </detail> diff --git a/src/main/resources/print_forms/ultrasoundresult_potrait.jrxml b/src/main/resources/print_forms/ultrasoundresult_potrait.jrxml index b4f531b..a83a87a 100644 --- a/src/main/resources/print_forms/ultrasoundresult_potrait.jrxml +++ b/src/main/resources/print_forms/ultrasoundresult_potrait.jrxml @@ -15,12 +15,8 @@ <parameter name="patientName" class="java.lang.String"/> <parameter name="patientDOB" class="java.lang.String"/> <parameter name="clinicAddress" class="java.lang.String"/> - <parameter name="logoImage" class="java.lang.String"/> <parameter name="barcodeNumber" class="java.lang.String"/> <parameter name="patientGender" class="java.lang.String"/> - <parameter name="hasMedicines" class="java.lang.Boolean"/> - <parameter name="hasServices" class="java.lang.Boolean"/> - <parameter name="hasSupplements" class="java.lang.Boolean"/> <parameter name="checkupConclusion" class="java.lang.String"/> <parameter name="checkupSuggestion" class="java.lang.String"/> <parameter name="reCheckupDate" class="java.lang.String"/> @@ -39,6 +35,7 @@ <parameter name="driveURL" class="java.lang.String"/> <parameter name="ultrasoundDoctorName" class="java.lang.String"/> <parameter name="clinicPrefix" class="java.lang.String"/> + <parameter name="id" class="java.lang.String"/> <query language="sql"><![CDATA[]]></query> <background splitType="Stretch"/> <title splitType="Stretch"/> @@ -47,16 +44,13 @@ <detail> <band height="598" splitType="Stretch"> <element kind="frame" uuid="2b7ec588-953c-4145-87b7-1d861c272fe0" x="0" y="0" width="551" height="598"> - <element kind="image" uuid="fd80ab38-4cae-409b-84b9-356220d2b1e5" x="0" y="-5" width="70" height="64"> - <expression><![CDATA[$P{logoImage}]]></expression> - </element> - <element kind="textField" uuid="eb56d4c8-2a0d-45fa-89a2-ad6528f9a99b" x="70" y="-5" width="358" height="22" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true" hTextAlign="Center"> + <element kind="textField" uuid="eb56d4c8-2a0d-45fa-89a2-ad6528f9a99b" x="1" y="-5" width="398" height="22" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true" hTextAlign="Center"> <expression><![CDATA[$P{clinicPrefix}]]></expression> </element> - <element kind="textField" uuid="796d9ffd-6d2e-4ae3-bdfb-b08183d7d9c0" x="70" y="29" width="358" height="20" fontName="Times New Roman" fontSize="10.0"> + <element kind="textField" uuid="796d9ffd-6d2e-4ae3-bdfb-b08183d7d9c0" x="1" y="29" width="398" height="12" fontName="Times New Roman" fontSize="10.0"> <expression><![CDATA[$P{clinicAddress}]]></expression> </element> - <element kind="textField" uuid="260bb33d-1d11-4178-aceb-3fbf8fcb4b45" x="70" y="41" width="276" height="15" fontName="Times New Roman" fontSize="8.0"> + <element kind="textField" uuid="260bb33d-1d11-4178-aceb-3fbf8fcb4b45" x="1" y="41" width="398" height="15" fontName="Times New Roman" fontSize="8.0"> <expression><![CDATA[$P{clinicPhone}]]></expression> </element> <element kind="staticText" uuid="6f89a93f-2d10-4506-baa5-226bdd047b17" x="0" y="65" width="100" height="30" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true"> @@ -134,24 +128,14 @@ <element kind="textField" uuid="6b0b21be-2ca3-4594-bbe9-34868e13eb1e" x="52" y="150" width="58" height="16" fontName="Times New Roman" fontSize="12.0"> <expression><![CDATA[$P{checkupBloodPressure} +" mmHg"]]></expression> </element> - <element kind="component" uuid="e8842007-3343-4399-a101-76a302d0755d" x="499" y="17" width="52" height="48"> - <component kind="barcode4j:QRCode"> - <codeExpression><![CDATA[$P{driveURL}]]></codeExpression> - </component> - </element> <element kind="textField" uuid="9763a634-05c2-4f64-a903-c914455b7ee6" x="70" y="61" width="282" height="20" forecolor="#FF0905" fontName="Times New Roman" fontSize="12.0" bold="true" hTextAlign="Center"> <printWhenExpression><![CDATA[$P{templateTitle} != null && !$P{templateTitle}.trim().isEmpty()]]></printWhenExpression> <expression><![CDATA["PHIẾU " + $P{templateTitle}]]></expression> </element> - <element kind="staticText" uuid="8f35aa72-22a4-45f0-a35e-8e35e832404e" x="495" y="64" width="55" height="14" fontName="Times New Roman" fontSize="8.0" bold="false" hTextAlign="Center"> - <printWhenExpression><![CDATA[$P{driveURL} != null && !$P{driveURL}.trim().isEmpty()]]></printWhenExpression> + <element kind="staticText" uuid="8f35aa72-22a4-45f0-a35e-8e35e832404e" x="495" y="61" width="55" height="14" fontName="Times New Roman" fontSize="8.0" bold="false" hTextAlign="Center"> + <printWhenExpression><![CDATA[$P{driveURL} != null]]></printWhenExpression> <text><![CDATA[Xem KQ online]]></text> </element> - <element kind="component" uuid="73f562ce-2891-4577-aec2-7284203c8430" x="429" y="15" width="70" height="49"> - <component kind="barcode4j:Code128"> - <codeExpression><![CDATA[$P{barcodeNumber}]]></codeExpression> - </component> - </element> <element kind="image" uuid="692eae9f-a304-4cda-856d-7a3a95fac3df" stretchType="NoStretch" x="400" y="91" width="151" height="124"> <expression><![CDATA[$P{image1}]]></expression> </element> @@ -164,9 +148,18 @@ <element kind="image" uuid="129e6c61-d572-48a9-925e-1ab2e4e573e2" x="400" y="466" width="151" height="124"> <expression><![CDATA[$P{image4}]]></expression> </element> - <element kind="textField" uuid="5fde8538-8d26-4761-9a19-dd716a74749a" x="70" y="12" width="358" height="20" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true" hTextAlign="Center"> + <element kind="textField" uuid="5fde8538-8d26-4761-9a19-dd716a74749a" x="1" y="12" width="398" height="20" forecolor="#FF0905" fontName="Times New Roman" fontSize="14.0" bold="true" hTextAlign="Center"> <expression><![CDATA[$P{clinicName}]]></expression> </element> + <element kind="image" uuid="a38cebd9-fec4-4e7f-8ec2-e6ee57a7464b" x="495" y="1" width="55" height="62"> + <expression><![CDATA[$P{driveURL}]]></expression> + </element> + <element kind="image" uuid="69654713-8c32-44f0-9d34-a2a7b9b2bb8d" x="404" y="8" width="80" height="34"> + <expression><![CDATA[$P{barcodeNumber}]]></expression> + </element> + <element kind="textField" uuid="989a8031-ea1b-406a-98a4-e797b98c0ccd" x="404" y="43" width="80" height="15" fontName="Times New Roman" fontSize="10.0" hTextAlign="Center"> + <expression><![CDATA[$P{id}]]></expression> + </element> </element> </band> </detail>