add formula of efficiency and shift target
parent
e2001174dd
commit
6b722b1965
|
@ -21,8 +21,8 @@ public class InventoryAccountDAO {
|
||||||
private final String SELECT_ALL_QUERY = String.format( "SELECT * FROM %s ORDER BY title DESC", TABLE_NAME );
|
private final String SELECT_ALL_QUERY = String.format( "SELECT * FROM %s ORDER BY title DESC", TABLE_NAME );
|
||||||
private final String DELETE_QUERY = String.format( "DELETE FROM %s WHERE id = :id", TABLE_NAME );
|
private final String DELETE_QUERY = String.format( "DELETE FROM %s WHERE id = :id", TABLE_NAME );
|
||||||
private final String INSERT_QUERY = String.format(
|
private final String INSERT_QUERY = String.format(
|
||||||
"INSERT INTO %s (id, title, parent_entity_type, parent_entity_id, active, created_by, created_at, location_site_id, notes, is_packaging, article_name, daily_target, total_machines, hourly_target) " +
|
"INSERT INTO %s (id, title, parent_entity_type, parent_entity_id, active, created_by, created_at, location_site_id, notes, is_packaging, article_name, shift_minutes, total_machines, efficiency, sam) " +
|
||||||
"VALUES (:id, :title, :parent_entity_type, :parent_entity_id, :active, :created_by, :created_at, :location_site_id, :notes, :is_packaging, :article_name, :daily_target, :total_machines, :hourly_target) " +
|
"VALUES (:id, :title, :parent_entity_type, :parent_entity_id, :active, :created_by, :created_at, :location_site_id, :notes, :is_packaging, :article_name, :shift_minutes, :total_machines, :efficiency, :sam) " +
|
||||||
"ON DUPLICATE KEY UPDATE " +
|
"ON DUPLICATE KEY UPDATE " +
|
||||||
"title = VALUES(title), " +
|
"title = VALUES(title), " +
|
||||||
"parent_entity_type = VALUES(parent_entity_type), " +
|
"parent_entity_type = VALUES(parent_entity_type), " +
|
||||||
|
@ -34,8 +34,9 @@ public class InventoryAccountDAO {
|
||||||
"notes = VALUES(notes), " +
|
"notes = VALUES(notes), " +
|
||||||
"is_packaging = VALUES(is_packaging), " +
|
"is_packaging = VALUES(is_packaging), " +
|
||||||
"article_name = VALUES(article_name), " +
|
"article_name = VALUES(article_name), " +
|
||||||
"daily_target = VALUES(daily_target), " +
|
"shift_minutes = VALUES(shift_minutes), " +
|
||||||
"hourly_target = VALUES(hourly_target), " +
|
"efficiency = VALUES(efficiency), " +
|
||||||
|
"sam = VALUES(sam), " +
|
||||||
"total_machines = VALUES(total_machines)",
|
"total_machines = VALUES(total_machines)",
|
||||||
TABLE_NAME
|
TABLE_NAME
|
||||||
);
|
);
|
||||||
|
@ -65,8 +66,9 @@ public class InventoryAccountDAO {
|
||||||
.addValue( "notes", inventoryAccount.getNotes() )
|
.addValue( "notes", inventoryAccount.getNotes() )
|
||||||
.addValue( "article_name", inventoryAccount.getArticleName() )
|
.addValue( "article_name", inventoryAccount.getArticleName() )
|
||||||
.addValue( "total_machines", inventoryAccount.getTotalMachines() )
|
.addValue( "total_machines", inventoryAccount.getTotalMachines() )
|
||||||
.addValue( "daily_target", inventoryAccount.getDailyTarget() )
|
.addValue( "shift_minutes", inventoryAccount.getShiftMinutes() )
|
||||||
.addValue( "hourly_target", inventoryAccount.getHourlyTarget() )
|
.addValue( "efficiency", inventoryAccount.getEfficiency() )
|
||||||
|
.addValue( "sam", inventoryAccount.getSam() )
|
||||||
.addValue("is_packaging", inventoryAccount.getIsPackaging() );
|
.addValue("is_packaging", inventoryAccount.getIsPackaging() );
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,9 +21,10 @@ public class InventoryAccountRowMapper implements RowMapper<InventoryAccount> {
|
||||||
inventoryAccount.setLocationSiteId( rs.getInt( "location_site_id" ) );
|
inventoryAccount.setLocationSiteId( rs.getInt( "location_site_id" ) );
|
||||||
inventoryAccount.setNotes( rs.getString( "notes" ) );
|
inventoryAccount.setNotes( rs.getString( "notes" ) );
|
||||||
inventoryAccount.setArticleName( rs.getString( "article_name" ) );
|
inventoryAccount.setArticleName( rs.getString( "article_name" ) );
|
||||||
inventoryAccount.setDailyTarget( rs.getLong( "daily_target" ) );
|
inventoryAccount.setShiftMinutes( rs.getLong( "shift_minutes" ) );
|
||||||
inventoryAccount.setTotalMachines( rs.getLong( "total_machines" ) );
|
inventoryAccount.setTotalMachines( rs.getLong( "total_machines" ) );
|
||||||
inventoryAccount.setHourlyTarget( rs.getLong( "hourly_target" ) );
|
inventoryAccount.setEfficiency( rs.getBigDecimal( "efficiency" ) );
|
||||||
|
inventoryAccount.setSam( rs.getBigDecimal( "sam" ) );
|
||||||
inventoryAccount.setIsPackaging( rs.getBoolean("is_packaging" ) );
|
inventoryAccount.setIsPackaging( rs.getBoolean("is_packaging" ) );
|
||||||
return inventoryAccount;
|
return inventoryAccount;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.utopiaindustries.model.ctp;
|
package com.utopiaindustries.model.ctp;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
public class InventoryAccount {
|
public class InventoryAccount {
|
||||||
|
@ -15,9 +16,10 @@ public class InventoryAccount {
|
||||||
private String notes;
|
private String notes;
|
||||||
private Boolean isPackaging;
|
private Boolean isPackaging;
|
||||||
private String articleName;
|
private String articleName;
|
||||||
private long dailyTarget;
|
private long shiftMinutes;
|
||||||
private long totalMachines;
|
private long totalMachines;
|
||||||
private long hourlyTarget;
|
private BigDecimal efficiency;
|
||||||
|
private BigDecimal sam;
|
||||||
|
|
||||||
//wrapper
|
//wrapper
|
||||||
private String locationTitle;
|
private String locationTitle;
|
||||||
|
@ -118,12 +120,12 @@ public class InventoryAccount {
|
||||||
this.articleName = articleName;
|
this.articleName = articleName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getDailyTarget() {
|
public long getShiftMinutes() {
|
||||||
return dailyTarget;
|
return shiftMinutes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDailyTarget(long dailyTarget) {
|
public void setShiftMinutes(long shiftMinutes) {
|
||||||
this.dailyTarget = dailyTarget;
|
this.shiftMinutes = shiftMinutes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getTotalMachines() {
|
public long getTotalMachines() {
|
||||||
|
@ -134,12 +136,20 @@ public class InventoryAccount {
|
||||||
this.totalMachines = totalMachines;
|
this.totalMachines = totalMachines;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getHourlyTarget() {
|
public BigDecimal getEfficiency() {
|
||||||
return hourlyTarget;
|
return efficiency;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHourlyTarget(long hourlyTarget) {
|
public void setEfficiency(BigDecimal efficiency) {
|
||||||
this.hourlyTarget = hourlyTarget;
|
this.efficiency = efficiency;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getSam() {
|
||||||
|
return sam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSam(BigDecimal sam) {
|
||||||
|
this.sam = sam;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -156,9 +166,9 @@ public class InventoryAccount {
|
||||||
", notes='" + notes + '\'' +
|
", notes='" + notes + '\'' +
|
||||||
", isPackaging=" + isPackaging +
|
", isPackaging=" + isPackaging +
|
||||||
", articleName='" + articleName + '\'' +
|
", articleName='" + articleName + '\'' +
|
||||||
", dailyTarget=" + dailyTarget +
|
", shiftMinutes=" + shiftMinutes +
|
||||||
", totalMachines=" + totalMachines +
|
", totalMachines=" + totalMachines +
|
||||||
", hourlyTarget=" + hourlyTarget +
|
", efficiency=" + efficiency +
|
||||||
", locationTitle='" + locationTitle + '\'' +
|
", locationTitle='" + locationTitle + '\'' +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,11 @@ import com.utopiaindustries.dao.ctp.*;
|
||||||
import com.utopiaindustries.model.ctp.*;
|
import com.utopiaindustries.model.ctp.*;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.time.Duration;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -37,7 +41,9 @@ public class DashboardService {
|
||||||
String finishingAccount = "FINISHING ACCOUNT " + lineNo;
|
String finishingAccount = "FINISHING ACCOUNT " + lineNo;
|
||||||
String packagingAccount = "A GRADE ACCOUNT " + lineNo;
|
String packagingAccount = "A GRADE ACCOUNT " + lineNo;
|
||||||
|
|
||||||
String startDate1 = LocalDateTime.now().withHour(0).withMinute(0).withSecond(1).format(formatter);
|
LocalDateTime today = LocalDateTime.now().withHour(0).withMinute(0).withSecond(1);
|
||||||
|
|
||||||
|
String startDate1 = today.format(formatter);
|
||||||
String endDate1 = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).format(formatter);
|
String endDate1 = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).format(formatter);
|
||||||
String startDateWithHour = LocalDateTime.now().minusHours(1).format(formatter);
|
String startDateWithHour = LocalDateTime.now().minusHours(1).format(formatter);
|
||||||
String endDateWithHour = LocalDateTime.now().format(formatter);
|
String endDateWithHour = LocalDateTime.now().format(formatter);
|
||||||
|
@ -65,7 +71,7 @@ public class DashboardService {
|
||||||
List<Long> packagingItemIDs = inventoryTransactionLegDAO.findRemainingByParentTypeAndAccountID("PACKAGING", inventoryAccountMap.get(packagingAccount));
|
List<Long> packagingItemIDs = inventoryTransactionLegDAO.findRemainingByParentTypeAndAccountID("PACKAGING", inventoryAccountMap.get(packagingAccount));
|
||||||
|
|
||||||
Long approvedStitchingOfflineItems = 0L;
|
Long approvedStitchingOfflineItems = 0L;
|
||||||
Long qcReject = 0L;
|
long qcReject = 0L;
|
||||||
if (stitchingItemIds != null && !stitchingItemIds.isEmpty()) {
|
if (stitchingItemIds != null && !stitchingItemIds.isEmpty()) {
|
||||||
approvedStitchingOfflineItems = stitchingOfflineItemDAO.findByQCOperationDateAndApproved(startDate1, endDate1, "APPROVED");
|
approvedStitchingOfflineItems = stitchingOfflineItemDAO.findByQCOperationDateAndApproved(startDate1, endDate1, "APPROVED");
|
||||||
qcReject = stitchingOfflineItemDAO.findByQCOperationDateAndIds(null, endDate1, "REJECT", stitchingItemIds);
|
qcReject = stitchingOfflineItemDAO.findByQCOperationDateAndIds(null, endDate1, "REJECT", stitchingItemIds);
|
||||||
|
@ -87,27 +93,35 @@ public class DashboardService {
|
||||||
|
|
||||||
|
|
||||||
Long packagingItems = 0L;
|
Long packagingItems = 0L;
|
||||||
Long packagingItemsHourly = 0L;
|
|
||||||
if (packagingItemIDs != null && !packagingItemIDs.isEmpty()) {
|
if (packagingItemIDs != null && !packagingItemIDs.isEmpty()) {
|
||||||
packagingItems = packagingItemsDAO.findByDateAndIds(startDate1, endDate1, packagingItemIDs);
|
packagingItems = packagingItemsDAO.findByDateAndIds(startDate1, endDate1, packagingItemIDs);
|
||||||
packagingItemsHourly = packagingItemsDAO.findByDateAndIds(startDateWithHour, endDateWithHour, packagingItemIDs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LocalDateTime statTime = LocalDateTime.now().withHour(9).withMinute(0).withSecond(0).withNano(0);
|
||||||
|
LocalDateTime endTime = statTime.plusMinutes(inventoryAccount.getShiftMinutes());
|
||||||
|
|
||||||
|
long minutesPassed = 0;
|
||||||
|
|
||||||
|
if (statTime.isBefore(LocalDateTime.now()) && LocalDateTime.now().isBefore(endTime)) {
|
||||||
|
minutesPassed = Duration.between(statTime, LocalDateTime.now()).toMinutes();
|
||||||
|
}
|
||||||
|
|
||||||
|
long shiftTargetMinutesWise = getTargetShiftWiseOrHourlyWise(Math.max(0, minutesPassed), inventoryAccount);
|
||||||
|
float efficiency;
|
||||||
|
if (shiftTargetMinutesWise == 0) {
|
||||||
|
efficiency = 0f;
|
||||||
|
} else {
|
||||||
|
efficiency = approvedStitchingOfflineItems + (float) qcReject / shiftTargetMinutesWise;
|
||||||
|
}
|
||||||
progress.put("Stitching", (float) approvedStitchingOfflineItems + qcReject);
|
progress.put("Stitching", (float) approvedStitchingOfflineItems + qcReject);
|
||||||
progress.put("totalWips", (float) stitchingItemIds.size() - qcReject);
|
progress.put("totalWips", (float) stitchingItemIds.size() - qcReject);
|
||||||
progress.put("Alteration", (float) qcReject);
|
progress.put("Alteration", (float) qcReject);
|
||||||
|
|
||||||
progress.put("finishing", (float) approved + operationNotPerformed);
|
progress.put("finishing", (float) approved + operationNotPerformed);
|
||||||
progress.put("ALTER", (float) alterationPieceFinish);
|
progress.put("ALTER", (float) alterationPieceFinish);
|
||||||
progress.put("Reject", (float) rejectFinishedItem);
|
progress.put("Reject", (float) rejectFinishedItem);
|
||||||
progress.put("wash", (float) washFinishedItem);
|
progress.put("wash", (float) washFinishedItem);
|
||||||
progress.put("packaging", (float) packagingItems);
|
progress.put("packaging", (float) packagingItems);
|
||||||
|
progress.put("Efficiency",efficiency);
|
||||||
progress.put("Shift Achieved", (float) packagingItems);
|
|
||||||
progress.put("Hourly Achieved", Float.valueOf(packagingItemsHourly));
|
|
||||||
progress.put("Efficiency", (float) packagingItems / inventoryAccount.getDailyTarget() * 100);
|
|
||||||
|
|
||||||
|
|
||||||
return progress;
|
return progress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,15 +131,37 @@ public class DashboardService {
|
||||||
InventoryAccount inventoryAccount = inventoryAccounts.stream()
|
InventoryAccount inventoryAccount = inventoryAccounts.stream()
|
||||||
.filter(e -> cuttingAccount.equals(e.getTitle())).findFirst().orElse(new InventoryAccount());
|
.filter(e -> cuttingAccount.equals(e.getTitle())).findFirst().orElse(new InventoryAccount());
|
||||||
|
|
||||||
|
int shiftTarget = getTargetShiftWiseOrHourlyWise(inventoryAccount.getShiftMinutes(), inventoryAccount);
|
||||||
|
int shiftHourlyTarget = getTargetShiftWiseOrHourlyWise(60, inventoryAccount);
|
||||||
|
|
||||||
HashMap<String, String> details = new HashMap<>();
|
HashMap<String, String> details = new HashMap<>();
|
||||||
List<JobCard> jobCards = jobCardDAO.findAll();
|
details.put("Shift Target", shiftTarget + " Pcs");
|
||||||
details.put("Shift Target", inventoryAccount.getDailyTarget() + " Pcs");
|
|
||||||
details.put("articleName", inventoryAccount.getArticleName());
|
details.put("articleName", inventoryAccount.getArticleName());
|
||||||
details.put("Hourly Target", inventoryAccount.getHourlyTarget() + " Pcs");
|
details.put("Hourly Target", shiftHourlyTarget + " Pcs");
|
||||||
details.put("Total Induction", String.valueOf(jobCards.size()));
|
|
||||||
details.put("Total Machine", String.valueOf(inventoryAccount.getTotalMachines()));
|
details.put("Total Machine", String.valueOf(inventoryAccount.getTotalMachines()));
|
||||||
details.put("Total Worker", String.valueOf(30));
|
details.put("Total Worker", String.valueOf(30));
|
||||||
details.put("line", "Line " + lineNo);
|
details.put("line", "Line " + lineNo);
|
||||||
return details;
|
return details;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//formula for calculating targets --> machine * shiftTime * Efficiency / SAM
|
||||||
|
private int getTargetShiftWiseOrHourlyWise(long minutes, InventoryAccount inventoryAccount) {
|
||||||
|
if (inventoryAccount == null ||
|
||||||
|
inventoryAccount.getTotalMachines() == 0 ||
|
||||||
|
inventoryAccount.getEfficiency() == null ||
|
||||||
|
inventoryAccount.getSam() == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
BigDecimal totalMachines = BigDecimal.valueOf(inventoryAccount.getTotalMachines());
|
||||||
|
BigDecimal efficiency = inventoryAccount.getEfficiency();
|
||||||
|
BigDecimal sam = inventoryAccount.getSam();
|
||||||
|
BigDecimal totalShiftProductiveTime = totalMachines
|
||||||
|
.multiply(BigDecimal.valueOf(minutes))
|
||||||
|
.multiply(efficiency);
|
||||||
|
if (sam.longValue() != 0) {
|
||||||
|
return totalShiftProductiveTime.divide(sam, 0, RoundingMode.HALF_UP).intValueExact();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,122 +1,132 @@
|
||||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml"
|
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml"
|
||||||
xmlns:uind="http://www.w3.org/1999/xhtml" xmlns:ctp="http://www.w3.org/1999/xhtml">
|
xmlns:uind="http://www.w3.org/1999/xhtml" xmlns:ctp="http://www.w3.org/1999/xhtml">
|
||||||
<head th:replace="_fragments :: head('Home Page')"></head>
|
<head th:replace="_fragments :: head('Home Page')"></head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<header class="row page-header" th:replace="_fragments :: page-header"></header>
|
<header class="row page-header" th:replace="_fragments :: page-header"></header>
|
||||||
<main class="row page-main">
|
<main class="row page-main">
|
||||||
<div class="col-sm" th:fragment="inventoryAccountForm">
|
<div class="col-sm" th:fragment="inventoryAccountForm">
|
||||||
<form th:action="@{ ${account.id} ? ('/inventory-accounts/edit/' + ${account.id}) : '/inventory-accounts/edit' }"
|
<form th:action="@{ ${account.id} ? ('/inventory-accounts/edit/' + ${account.id}) : '/inventory-accounts/edit' }"
|
||||||
method="POST" th:object="${account}"
|
method="POST" th:object="${account}"
|
||||||
id="accountApp">
|
id="accountApp">
|
||||||
<input type="hidden" th:field="*{id}">
|
<input type="hidden" th:field="*{id}">
|
||||||
<input type="hidden" th:field="*{createdAt}">
|
<input type="hidden" th:field="*{createdAt}">
|
||||||
<input type="hidden" th:field="*{createdBy}">
|
<input type="hidden" th:field="*{createdBy}">
|
||||||
<div class="bg-light p-3 mb-3">
|
<div class="bg-light p-3 mb-3">
|
||||||
<h6 class="mb-3">Account </h6>
|
<h6 class="mb-3">Account </h6>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<div class="col-sm-3 form-group">
|
<div class="col-sm-3 form-group">
|
||||||
<label>Title</label>
|
<label>Title</label>
|
||||||
<input class="form-control" th:field="*{title}" required>
|
<input class="form-control" th:field="*{title}" required>
|
||||||
</div>
|
|
||||||
<div class="col-sm-3 form-group">
|
|
||||||
<label>Article Name</label>
|
|
||||||
<input class="form-control" th:field="*{articleName}" >
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3 form-group">
|
|
||||||
<label>Day Target</label>
|
|
||||||
<input type="number" class="form-control" th:field="*{dailyTarget}" >
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3 form-group">
|
|
||||||
<label>Hourly Target</label>
|
|
||||||
<input type="number" class="form-control" th:field="*{hourlyTarget}" >
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3 form-group">
|
|
||||||
<label>Total Machine</label>
|
|
||||||
<input type="number" class="form-control" th:field="*{totalMachines}" >
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6 form-group">
|
|
||||||
<label>Notes</label>
|
|
||||||
<input class="form-control" th:field="*{notes}" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-light p-3 mb-3">
|
<div class="col-sm-3 form-group">
|
||||||
<h6 class="mb-3">Misc </h6>
|
<label>Article Name</label>
|
||||||
<div class="form-row">
|
<input class="form-control" th:field="*{articleName}">
|
||||||
<div class="col-sm-3 form-group">
|
|
||||||
<label>Parent Type</label>
|
|
||||||
<select class="form-control" th:field="*{parentEntityType}">
|
|
||||||
<option value="">Please Select</option>
|
|
||||||
<option value="PROCESS">PROCESS</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3 form-group">
|
|
||||||
<label>Process</label>
|
|
||||||
<select class="form-control" th:field="*{parentEntityId}">
|
|
||||||
<option value="0">Please Select</option>
|
|
||||||
<option th:each="process:${processes}"
|
|
||||||
th:value="${process.id}"
|
|
||||||
th:text="${process.title}"
|
|
||||||
></option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3 form-group" data-vue-app th:with="id=*{locationSiteId},title=*{locationTitle}">
|
|
||||||
<location-site-search th:attr="id=${id},title=${title}"
|
|
||||||
v-bind:label-text="'Location Site'"
|
|
||||||
v-bind:id-field-name="'locationSiteId'"
|
|
||||||
v-bind:required="true">
|
|
||||||
</location-site-search>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="col-sm-3 form-group">
|
|
||||||
<label>Created By</label>
|
|
||||||
<span th:text="*{createdBy}" class="form-control" readonly></span>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3 form-group">
|
|
||||||
<label>Created At</label>
|
|
||||||
<span class="form-control" ctp:formatdatetime="*{createdAt}" readonly></span>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-1 form-group">
|
|
||||||
<label for="active">Active</label>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="custom-control-label:" type="checkbox" id="active" th:field="*{active}" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-1 form-group">
|
|
||||||
<label for="is-grading">Is Grading Account</label>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="custom-control-label:" type="checkbox" id="is-grading" th:field="*{isPackaging}" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="col-sm-3 form-group">
|
||||||
<button class="btn btn-primary" type="submit">Submit</button>
|
<label>Shift Minutes</label>
|
||||||
<a th:href="@{/inventory-accounts}" class="btn btn-light">Cancel</a>
|
<input type="number" class="form-control" th:field="*{shiftMinutes}">
|
||||||
</div>
|
</div>
|
||||||
</form>
|
<div class="col-sm-3 form-group">
|
||||||
|
<label>Efficiency</label>
|
||||||
|
<input type="number" class="form-control" th:field="*{efficiency}" step="0.01"
|
||||||
|
inputmode="decimal" min="0">
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-3 form-group">
|
||||||
|
<label>SAM</label>
|
||||||
|
<input type="number" class="form-control no-spinner" th:field="*{sam}" step="0.01"
|
||||||
|
inputmode="decimal" min="0"></div>
|
||||||
|
<div class="col-sm-3 form-group">
|
||||||
|
<label>Total Machine</label>
|
||||||
|
<input type="number" class="form-control" th:field="*{totalMachines}">
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6 form-group">
|
||||||
|
<label>Notes</label>
|
||||||
|
<input class="form-control" th:field="*{notes}" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
<div class="bg-light p-3 mb-3">
|
||||||
|
<h6 class="mb-3">Misc </h6>
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="col-sm-3 form-group">
|
||||||
|
<label>Parent Type</label>
|
||||||
|
<select class="form-control" th:field="*{parentEntityType}">
|
||||||
|
<option value="">Please Select</option>
|
||||||
|
<option value="PROCESS">PROCESS</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-3 form-group">
|
||||||
|
<label>Process</label>
|
||||||
|
<select class="form-control" th:field="*{parentEntityId}">
|
||||||
|
<option value="0">Please Select</option>
|
||||||
|
<option th:each="process:${processes}"
|
||||||
|
th:value="${process.id}"
|
||||||
|
th:text="${process.title}"
|
||||||
|
></option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-3 form-group" data-vue-app
|
||||||
|
th:with="id=*{locationSiteId},title=*{locationTitle}">
|
||||||
|
<location-site-search th:attr="id=${id},title=${title}"
|
||||||
|
v-bind:label-text="'Location Site'"
|
||||||
|
v-bind:id-field-name="'locationSiteId'"
|
||||||
|
v-bind:required="true">
|
||||||
|
</location-site-search>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="col-sm-3 form-group">
|
||||||
|
<label>Created By</label>
|
||||||
|
<span th:text="*{createdBy}" class="form-control" readonly></span>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-3 form-group">
|
||||||
|
<label>Created At</label>
|
||||||
|
<span class="form-control" ctp:formatdatetime="*{createdAt}" readonly></span>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-1 form-group">
|
||||||
|
<label for="active">Active</label>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="custom-control-label:" type="checkbox" id="active" th:field="*{active}"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-1 form-group">
|
||||||
|
<label for="is-grading">Is Grading Account</label>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="custom-control-label:" type="checkbox" id="is-grading"
|
||||||
|
th:field="*{isPackaging}"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<button class="btn btn-primary" type="submit">Submit</button>
|
||||||
|
<a th:href="@{/inventory-accounts}" class="btn btn-light">Cancel</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</main>
|
||||||
<style>
|
</div>
|
||||||
/* Custom CSS to increase the size of the checkbox */
|
</body>
|
||||||
.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {
|
<style>
|
||||||
border-color: #007bff;
|
/* Custom CSS to increase the size of the checkbox */
|
||||||
background-color: #007bff;
|
.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {
|
||||||
}
|
border-color: #007bff;
|
||||||
.custom-checkbox .custom-control-input ~ .custom-control-label::before {
|
background-color: #007bff;
|
||||||
width: 1.5em;
|
}
|
||||||
height: 1.5em;
|
|
||||||
}
|
.custom-checkbox .custom-control-input ~ .custom-control-label::before {
|
||||||
.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {
|
width: 1.5em;
|
||||||
font-size: 1em;
|
height: 1.5em;
|
||||||
}
|
}
|
||||||
.custom-checkbox .custom-control-input {
|
|
||||||
width: 1.5em;
|
.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {
|
||||||
height: 1.5em;
|
font-size: 1em;
|
||||||
}
|
}
|
||||||
</style>
|
|
||||||
|
.custom-checkbox .custom-control-input {
|
||||||
|
width: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</html>
|
</html>
|
|
@ -87,7 +87,7 @@
|
||||||
<div class="col-lg-6 border border-black-50 p-5 d-flex flex-column align-items-center justify-content-center text-center text-white rounded"
|
<div class="col-lg-6 border border-black-50 p-5 d-flex flex-column align-items-center justify-content-center text-center text-white rounded"
|
||||||
style="background-color: #516ec4; height: 100%; ">
|
style="background-color: #516ec4; height: 100%; ">
|
||||||
<h1 class="fw-bold pl-3 pr-3 pt-5 pb-2" style="font-size: 6rem;"
|
<h1 class="fw-bold pl-3 pr-3 pt-5 pb-2" style="font-size: 6rem;"
|
||||||
th:text="${phases.get('Efficiency') + ' %'}">0%</h1>
|
th:text="${#numbers.formatDecimal(phases.get('Efficiency'), 1, 2) + ' %'}">0%</h1>
|
||||||
<h1 class="fw-bold m-0 text-start pl-3 pr-3 pb-5 pt-2" style="font-size: 5rem;">Efficiency</h1>
|
<h1 class="fw-bold m-0 text-start pl-3 pr-3 pb-5 pt-2" style="font-size: 5rem;">Efficiency</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -100,7 +100,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- Card 3: Finishing -->
|
<!-- Card 3: Finishing -->
|
||||||
<div class="col-lg-3 d-flex">
|
<div class="col-lg-3 d-flex">
|
||||||
<div class="card w-100 h-100">
|
<div class="card w-100 h-100">
|
||||||
|
|
Loading…
Reference in New Issue