This commit is contained in:
aespin 2024-10-09 16:02:06 +02:00
parent fbc6a18b0e
commit 514d412a20
15 changed files with 283 additions and 314 deletions

90
TODO
View File

@ -1,56 +1,34 @@
Grupo6 string `json:"grupo6"`
Po int `json:"po" gorm:"index"`
Co int `json:"co"`
Colada string `json:"colada"`
Calidad string `json:"calidad"`
Matnr string `json:"matnr"`
Dibujo int `json:"dibujo"`
Operador string `json:"operador"`
Serie int `json:"serie"`
Nromatricula string `gorm:"primaryKey" json:"nromatricula"`
NroBulto string `json:"nro_bulto"`
EtiquetaDoble string `json:"etiqueta_doble"`
Fecha int `json:"fecha"`
Turno string `json:"turno"`
Observacion1 string `json:"observacion1"`
Observacion2 string `json:"observacion2"`
Observacion3 string `json:"observacion3"`
PaqueteLongitud float64 `json:"paquete_longitud"`
PaqueteAncho int `json:"paquete_ancho"`
PaqueteAlto float64 `json:"paquete_alto"`
PaquetePeso int `json:"paquete_peso"`
PaqueteNroSecciones int `json:"paquete_nro_secciones"`
PaqueteNroMantos int `json:"paquete_nro_mantos"`
PaqueteNroSeccManto int `json:"paquete_nro_secc_manto"`
SeccionTipo string `gorm:"index" json:"seccion_tipo"`
SeccionLongitud int `json:"seccion_longitud"`
SeccionAncho float64 `json:"seccion_ancho"`
SeccionAlto float64 `json:"seccion_alto"`
Idioma string `json:"idioma"`
Destino int `json:"destino"`
Hora int `json:"hora"`
Horario int `json:"horario"`
Inst string `json:"inst"`
Tren int `json:"tren"`
Normed string `json:"normed"`
Norpro string `json:"norpro"`
Nortol string `json:"nortol"`
Spras string `json:"spras"`
Statu int `json:"statu"`
Crlf string `json:"crlf"`
Maquina int `json:"maquina"`
Padre string `json:"padre"`
Paqpadre string `json:"paqpadre"`
RelevantTime string `json:"relevant_time"`
Desvio float64 `json:"desvio"`
Pesoteorico float64 `json:"pesoteorico"`
PesoteoricoReal float64 `json:"pesoteorico_real"`
DesvioTeoricoReal float64 `json:"desvio_teorico_real"`
FechaImpresion string `json:"fecha_impresion"`
PesoNivel1 float64 `json:"peso_nivel1"`
L3Sended bool `json:"l3_sended,omitempty"`
Confirmed bool `json:"confirmed,omitempty"`
SAP bool `json:"sap,omitempty"`
CreatedAt time.Time `gorm:"->;<-:create" json:"createdat,omitempty"`
UpdatedAt time.Time `json:"updatedat,omitempty"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"deletedat,omitempty"`
<div class="columns">
<div class="column is-one-fifth">
<aside class="menu">
<p class="menu-label">Panel</p>
<ul class="menu-list">
<li><a href="/">Inicio</a></li>
</ul>
<p class="menu-label">Etiquetas leídas</p>
<ul class="menu-list">
<li><a href="/barcodes">Consultar</a></li>
</ul>
<p class="menu-label">Paquetes</p>
<ul class="menu-list">
<li><a href="/bundle">Consultar</a></li>
</ul>
<p class="menu-label">Datos de fabricación</p>
<ul class="menu-list">
<li><a href="/po">Orden de producción</a></li>
<li><a href="/co">Orden de cliente</a></li>
<li><a href="/bcp">Orden de corte placa</a></li>
<li><a href="/lcp">Orden de corte layer</a></li>
<li><a href="/hbcp">Hoja BCP</a></li>
</ul>
<p class="menu-label">Calidad</p>
<ul class="menu-list">
<li><a href="/standards">Normas</a></li>
</ul>
<p class="menu-label">Etiquetas</p>
<ul class="menu-list">
<li><a href="/labels">Últimas etiquetas</a></li>
</ul>
</aside>
</div>
</div>

View File

@ -37,6 +37,13 @@ func BundleHandler(storage storage.Storager) httprouter.Handle {
fechas := r.FormValue("fechas")
// loading bed
evacuadores := r.FormValue("evacuadores")
// checkbox value
onoff := r.FormValue("confirmed")
// confirmed
confirmed := false
if onoff == "on" {
confirmed = true
}
// check form values
if codigo != "" {
// call storager
@ -62,7 +69,7 @@ func BundleHandler(storage storage.Storager) httprouter.Handle {
return
}
// call storager
data, err := storage.ListBundle(r.Context(), lb, inicio, final)
data, err := storage.ListBundle(r.Context(), lb, inicio, final, confirmed)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return

View File

@ -3,15 +3,42 @@ package handlers
import (
"net/http"
"text/template"
"time"
"git.espin.casa/albert/cml04-falcon-ui/helper"
"git.espin.casa/albert/cml04-falcon-ui/storage"
"git.espin.casa/albert/cml04-falcon-ui/types"
"github.com/julienschmidt/httprouter"
)
func IndexHandler(storage storage.Storager) httprouter.Handle {
type PageView struct {
Stats *types.Stats
Bundles []types.BundleData
Barcodes []types.Barcode
}
return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
// get current shift dates
dates, err := helper.GetShiftDates(time.Now())
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
//
bundles, err := storage.ShiftListBundle(r.Context(), dates[0], dates[1])
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// create view
view := &PageView{
Stats: &types.Stats{},
Bundles: bundles,
Barcodes: []types.Barcode{},
}
t, _ := template.ParseFiles("templates/base.html", "templates/index.html")
err := t.Execute(w, nil)
err = t.Execute(w, view)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return

View File

@ -1,6 +1,7 @@
package helper
import (
"fmt"
"strings"
"time"
)
@ -24,3 +25,27 @@ func Dates(dr string) (start, finish time.Time, err error) {
}
return
}
func GetShiftDates(inputTime time.Time) ([]time.Time, error) {
if inputTime.Hour() >= 6 && inputTime.Hour() < 14 {
// First shift: 6 to 14 hours
startTime := time.Date(inputTime.Year(), inputTime.Month(), inputTime.Day(), 6, 0, 0, 0, inputTime.Location())
endTime := time.Date(inputTime.Year(), inputTime.Month(), inputTime.Day(), 14, 0, 0, 0, inputTime.Location())
return []time.Time{startTime, endTime}, nil
} else if inputTime.Hour() >= 14 && inputTime.Hour() < 22 {
// Second shift: 14 to 22 hours
startTime := time.Date(inputTime.Year(), inputTime.Month(), inputTime.Day(), 14, 0, 0, 0, inputTime.Location())
endTime := time.Date(inputTime.Year(), inputTime.Month(), inputTime.Day(), 22, 0, 0, 0, inputTime.Location())
return []time.Time{startTime, endTime}, nil
} else if inputTime.Hour() >= 22 || inputTime.AddDate(0, 0, 1).Hour() < 6 {
// Third shift: 22 hours to 6 next day
startTime := time.Date(inputTime.Year(), inputTime.Month(), inputTime.Day(), 22, 0, 0, 0, inputTime.Location())
endTime := time.Date(inputTime.AddDate(0, 0, 1).Year(), inputTime.AddDate(0, 0, 1).Month(), inputTime.AddDate(0, 0, 1).Day(), 6, 0, 0, 0, inputTime.Location())
return []time.Time{startTime, endTime}, nil
} else {
return nil, fmt.Errorf("el horario de entrada no es válido")
}
}

42
helper/helper_test.go Normal file
View File

@ -0,0 +1,42 @@
package helper
import (
"testing"
"time"
)
func TestGetShiftDates(t *testing.T) {
// First case 1: First shift
inputTime := time.Date(2023, 1, 15, 7, 0, 0, 0, time.UTC)
expectedStart := time.Date(2023, 1, 15, 6, 0, 0, 0, time.UTC)
expectedEnd := time.Date(2023, 1, 15, 14, 0, 0, 0, time.UTC)
shifts, err := GetShiftDates(inputTime)
if err != nil {
t.Errorf("unexpected error GetShiftDates: %v", err)
}
if shifts[0] != expectedStart || shifts[1] != expectedEnd {
t.Errorf("not expected results: got %v, %v; want %v, %v", shifts[0], shifts[1], expectedStart, expectedEnd)
}
// Second case 1: Second shift
inputTime = time.Date(2023, 1, 15, 14, 0, 0, 0, time.UTC)
expectedStart = time.Date(2023, 1, 15, 14, 0, 0, 0, time.UTC)
expectedEnd = time.Date(2023, 1, 15, 22, 0, 0, 0, time.UTC)
shifts, err = GetShiftDates(inputTime)
if err != nil {
t.Errorf("unexpected error GetShiftDates: %v", err)
}
if shifts[0] != expectedStart || shifts[1] != expectedEnd {
t.Errorf("not expected results: got %v, %v; want %v, %v", shifts[0], shifts[1], expectedStart, expectedEnd)
}
// Third case 3: Third shift
inputTime = time.Date(2023, 1, 15, 23, 0, 0, 0, time.UTC)
expectedStart = time.Date(2023, 1, 15, 22, 0, 0, 0, time.UTC)
expectedEnd = time.Date(2023, 1, 16, 6, 0, 0, 0, time.UTC)
shifts, err = GetShiftDates(inputTime)
if err != nil {
t.Errorf("unexpected error GetShiftDates: %v", err)
}
if shifts[0] != expectedStart || shifts[1] != expectedEnd {
t.Errorf("not expected results: got %v, %v; want %v, %v", shifts[0], shifts[1], expectedStart, expectedEnd)
}
}

View File

@ -24,6 +24,7 @@ type Storager interface {
ListBarcode(ctx context.Context, lb types.LoadingBed, inicio, final time.Time) (barcodes []types.Barcode, err error)
Bundle(ctx context.Context, ua string) (bundle *types.BundleData, err error)
ListBundle(ctx context.Context, lb types.LoadingBed, inicio, final time.Time, confirmed bool) (bundles []types.BundleData, err error)
ShiftListBundle(ctx context.Context, inicio, final time.Time) (bundles []types.BundleData, err error)
}
type storage struct {
@ -31,6 +32,14 @@ type storage struct {
mux sync.RWMutex
}
// ShiftListBundle implements Storager.
func (s *storage) ShiftListBundle(ctx context.Context, inicio, final time.Time) (bundles []types.BundleData, err error) {
if err := s.db.Where("created_at >= ? and created_at < ?", inicio, final).Find(&bundles).WithContext(ctx).Error; err != nil {
return nil, err
}
return
}
// ListBundle implements Storager.
func (s *storage) ListBundle(ctx context.Context, lb types.LoadingBed, inicio time.Time, final time.Time, confirmed bool) (bundles []types.BundleData, err error) {
if lb == types.ALL {

View File

@ -4,38 +4,6 @@
<div class="container is-fluid">
<div class="columns">
<div class="column is-one-fifth">
<aside class="menu">
<p class="menu-label">Panel</p>
<ul class="menu-list">
<li><a href="/">Inicio</a></li>
</ul>
<p class="menu-label">Etiquetas leídas</p>
<ul class="menu-list">
<li><a href="/barcodes">Consultar</a></li>
</ul>
<p class="menu-label">Paquetes</p>
<ul class="menu-list">
<li><a href="/bundle">Consultar</a></li>
</ul>
<p class="menu-label">Datos de fabricación</p>
<ul class="menu-list">
<li><a href="/po">Orden de producción</a></li>
<li><a href="/co">Orden de cliente</a></li>
<li><a href="/bcp">Orden de corte placa</a></li>
<li><a href="/lcp">Orden de corte layer</a></li>
<li><a href="/hbcp">Hoja BCP</a></li>
</ul>
<p class="menu-label">Calidad</p>
<ul class="menu-list">
<li><a href="/standards">Normas</a></li>
</ul>
<p class="menu-label">Etiquetas</p>
<ul class="menu-list">
<li><a href="/labels">Ultimas etiquetas</a></li>
</ul>
</aside>
</div>
<div class="column">
<nav class="panel is-link">
<p class="panel-heading"><i class="far fa-file"></i> Busqueda de códigos</p>

View File

@ -17,13 +17,65 @@
</head>
<body>
<div class="notification is-link banner">
<!-- <div class="notification is-link banner">
<p>FALCON
<figure class="image is-64x64">
<img src="/assets/img/falcon-transparent-white.png" alt="white falcon" />
</figure>
</p>
</div>
</div> -->
<nav class="navbar is-link">
<div class="navbar-brand">
<a class="navbar-item" href="#"></a>
<div id="navbarBasicExample" class="navbar-menu">
<div class="navbar-start">
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">
Etiquetas Leídas
</a>
<div class="navbar-dropdown">
<a class="navbar-item">
Consultar
</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">
Paquetes
</a>
<div class="navbar-dropdown">
<a class="navbar-item">
Consultar
</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">
Datos Producción
</a>
<div class="navbar-dropdown">
<a href="/po" class="navbar-item">Orden de producción</a>
<a href="/co" class="navbar-item">Orden de cliente</a>
<a href="/bcp" class="navbar-item">Orden de corte placa</a>
<a href="/lcp" class="navbar-item">Orden de corte layer</a>
<a href="/hbcp" class="navbar-item">Hoja cortes</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">
Calidad
</a>
<div class="navbar-dropdown">
<a href="/normas" class="navbar-item">Normas</a>
</div>
</div>
<a class="navbar-item">
Etiquetas
</a>
</div>
</div>
</div>
</nav>
{{ template "body" . }}

View File

@ -3,40 +3,9 @@
{{define "body"}}
<div class="container is-fluid">
<hr>
<h3 class="title is-3">Orden corte placa</h3>
<div class="columns">
<div class="column is-one-fifth">
<aside class="menu">
<p class="menu-label">Panel</p>
<ul class="menu-list">
<li><a href="/">Inicio</a></li>
</ul>
<p class="menu-label">Etiquetas leídas</p>
<ul class="menu-list">
<li><a href="/barcodes">Consultar</a></li>
</ul>
<p class="menu-label">Paquetes</p>
<ul class="menu-list">
<li><a href="/bundle">Consultar</a></li>
</ul>
<p class="menu-label">Datos de fabricación</p>
<ul class="menu-list">
<li><a href="/po">Orden de producción</a></li>
<li><a href="/co">Orden de cliente</a></li>
<li><a href="/bcp">Orden de corte placa</a></li>
<li><a href="/lcp">Orden de corte layer</a></li>
<li><a href="/hbcp">Hoja BCP</a></li>
</ul>
<p class="menu-label">Calidad</p>
<ul class="menu-list">
<li><a href="/standards">Normas</a></li>
</ul>
<p class="menu-label">Etiquetas</p>
<ul class="menu-list">
<li><a href="/labels">Ultimas etiquetas</a></li>
</ul>
</aside>
</div>
<div class="column">
<nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-pencil-ruler" aria-hidden="true"></i> Orden de corte placa</p>

View File

@ -3,40 +3,9 @@
{{define "body"}}
<div class="container is-fluid">
<hr>
<h3 class="title is-3">Orden cliente</h3>
<div class="columns">
<div class="column is-one-fifth">
<aside class="menu">
<p class="menu-label">Panel</p>
<ul class="menu-list">
<li><a href="/">Inicio</a></li>
</ul>
<p class="menu-label">Etiquetas leídas</p>
<ul class="menu-list">
<li><a href="/barcodes">Consultar</a></li>
</ul>
<p class="menu-label">Paquetes</p>
<ul class="menu-list">
<li><a href="/bundle">Consultar</a></li>
</ul>
<p class="menu-label">Datos de fabricación</p>
<ul class="menu-list">
<li><a href="/po">Orden de producción</a></li>
<li><a href="/co">Orden de cliente</a></li>
<li><a href="/bcp">Orden de corte placa</a></li>
<li><a href="/lcp">Orden de corte layer</a></li>
<li><a href="/hbcp">Hoja BCP</a></li>
</ul>
<p class="menu-label">Calidad</p>
<ul class="menu-list">
<li><a href="/standards">Normas</a></li>
</ul>
<p class="menu-label">Etiquetas</p>
<ul class="menu-list">
<li><a href="/labels">Ultimas etiquetas</a></li>
</ul>
</aside>
</div>
<div class="column">
<nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-user-edit" aria-hidden="true"></i> Orden de cliente</p>

View File

@ -3,39 +3,9 @@
{{define "body"}}
<div class="container is-fluid">
<hr>
<h3 class="title is-3">Hoja cortes</h3>
<div class="columns">
<div class="column is-one-fifth">
<aside class="menu">
<p class="menu-label">Panel</p>
<ul class="menu-list">
<li><a href="/">Inicio</a></li>
</ul>
<p class="menu-label">Etiquetas leídas</p>
<ul class="menu-list">
<li><a href="/barcodes">Consultar</a></li>
</ul>
<p class="menu-label">Paquetes</p>
<ul class="menu-list">
<li><a href="/bundle">Consultar</a></li>
</ul>
<p class="menu-label">Datos de fabricación</p>
<ul class="menu-list">
<li><a href="/po">Orden de producción</a></li>
<li><a href="/co">Orden de cliente</a></li>
<li><a href="/bcp">Orden de corte placa</a></li>
<li><a href="/lcp">Orden de corte layer</a></li>
<li><a href="/hbcp">Hoja BCP</a></li>
</ul>
<p class="menu-label">Calidad</p>
<ul class="menu-list">
<li><a href="/standards">Normas</a></li>
</ul>
<p class="menu-label">Etiquetas</p>
<ul class="menu-list">
<li><a href="/labels">Ultimas etiquetas</a></li>
</ul>
</aside>
</div>
<div class="column">
<nav class="panel is-link">
<p class="panel-heading"><i class="far fa-file"></i> Hoja patrón corte</p>

View File

@ -3,38 +3,36 @@
{{define "body"}}
<div class="container is-fluid">
<div class="columns">
<div class="column is-one-fifth">
<aside class="menu">
<p class="menu-label">Panel</p>
<ul class="menu-list">
<li><a href="/">Inicio</a></li>
</ul>
<p class="menu-label">Etiquetas leídas</p>
<ul class="menu-list">
<li><a href="/barcodes">Consultar</a></li>
</ul>
<p class="menu-label">Paquetes</p>
<ul class="menu-list">
<li><a href="/bundle">Consultar</a></li>
</ul>
<p class="menu-label">Datos de fabricación</p>
<ul class="menu-list">
<li><a href="/po">Orden de producción</a></li>
<li><a href="/co">Orden de cliente</a></li>
<li><a href="/bcp">Orden de corte placa</a></li>
<li><a href="/lcp">Orden de corte layer</a></li>
<li><a href="/hbcp">Hoja BCP</a></li>
</ul>
<p class="menu-label">Calidad</p>
<ul class="menu-list">
<li><a href="/standards">Normas</a></li>
</ul>
<p class="menu-label">Etiquetas</p>
<ul class="menu-list">
<li><a href="/labels">Últimas etiquetas</a></li>
</ul>
</aside>
<hr>
<h3 class="title is-3">Panel principal</h3>
<div class="columns is-multiline">
<div class="column is-12">
<nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-chart-line" aria-hidden="true"></i> Estadísticas turno</p>
<div class="panel-block">
<table class="table">
<thead>
<tr>
<td>Paq.Etiquetados</td>
<td>Eti.Leídas</td>
<td>Paq.Confirmados</td>
</tr>
</thead>
<!-- <tfoot>
<tr>
<td>Paq.Etiquetados</td>
<td>Eti.Leídas</td>
<td>Paq.Confirmados</td>
</tr>
</tfoot> -->
<tbody>
<tr>
<td></td>
</tr>
</tbody>
</table>
</div>
</nav>
</div>
<div class="column is-one-quarter">
<nav class="panel is-link">
@ -65,14 +63,8 @@
</table>
</div>
</nav>
<nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-chart-line" aria-hidden="true"></i> Estadísticas turno</p>
<div class="panel-block">
<span class="tag is-success is-medium">100</span><p> Etiquetas leídas</p>
</div>
</nav>
</div>
{{ if .Bundles }}
<div class="column">
<nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-box"></i> Paquetes</p>
@ -83,15 +75,15 @@
<th><abbr title="Unidad de almacén">UA</abbr></th>
<th>PO</th>
<th>CO</th>
<th>Colada</th>
<th>Calidad</th>
<th>Código SAP</th>
<th>Producto</th>
<th>Peso</th>
<th>Desvío</th>
<th>Confirmado</th>
<th>Nivel 3</th>
<th><abbr title="Paquete confirmado">Conf.</abbr></th>
<th><abbr title="Nivel 3">N3</abbr></th>
<th>SAP</th>
<th>Fecha</th>
</tr>
</thead>
<tfoot>
@ -99,37 +91,40 @@
<th><abbr title="Unidad de almacén">UA</abbr></th>
<th>PO</th>
<th>CO</th>
<th>Colada</th>
<th>Calidad</th>
<th>Código SAP</th>
<th>Producto</th>
<th>Peso</th>
<th>Desvío</th>
<th>Confirmado</th>
<th>Nivel 3</th>
<th><abbr title="Paquete confirmado">Conf.</abbr></th>
<th><abbr title="Nivel 3">N3</abbr></th>
<th>SAP</th>
<th>Fecha</th>
</tr>
</tfoot>
<tbody>
{{ range .Bundles }}
<tr>
<td><a href="">9402555315</a></td>
<td><a href="">131620</a> </td>
<td><a href="">40160750</a></td>
<td>CE253242</td>
<td>S 275 JR +AR</td>
<td>BB01-140X12.1</td>
<td>HEB140</td>
<td>4776</td>
<td>-2.40</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td><a href="">{{ .Nromatricula }}</a></td>
<td><a href="">{{ .Po }}</a></td>
<td><a href="">{{ .Co }}</a></td>
<td>{{ .Calidad }}</td>
<td>{{ .Matnr }}</td>
<td>{{ .SeccionTipo }}</td>
<td>{{ .PaquetePeso }}</td>
<td>{{ .FormatDesvio }}</td>
<td>{{if .L3Sended }} Sí {{ else }} No {{ end }}</td>
<td>{{if .Confirmed }} Sí {{ else }} No {{ end }}</td>
<td>{{if .SAP }} Sí {{ else }} No {{ end }}</td>
<td>{{ .FormatCreatedAt }}</td>
</tr>
{{ end }}
</tbody>
</table>
</div>
</nav>
</div>
{{ end }}
</div>
</div>
{{ end }}

View File

@ -3,40 +3,9 @@
{{define "body"}}
<div class="container is-fluid">
<hr>
<h3 class="title is-3">Ordenes de corte layer</h3>
<div class="columns">
<div class="column is-one-fifth">
<aside class="menu">
<p class="menu-label">Panel</p>
<ul class="menu-list">
<li><a href="/">Inicio</a></li>
</ul>
<p class="menu-label">Etiquetas leídas</p>
<ul class="menu-list">
<li><a href="/barcodes">Consultar</a></li>
</ul>
<p class="menu-label">Paquetes</p>
<ul class="menu-list">
<li><a href="/bundle">Consultar</a></li>
</ul>
<p class="menu-label">Datos de fabricación</p>
<ul class="menu-list">
<li><a href="/po">Orden de producción</a></li>
<li><a href="/co">Orden de cliente</a></li>
<li><a href="/bcp">Orden de corte placa</a></li>
<li><a href="/lcp">Orden de corte layer</a></li>
<li><a href="/hbcp">Hoja BCP</a></li>
</ul>
<p class="menu-label">Calidad</p>
<ul class="menu-list">
<li><a href="/standards">Normas</a></li>
</ul>
<p class="menu-label">Etiquetas</p>
<ul class="menu-list">
<li><a href="/labels">Ultimas etiquetas</a></li>
</ul>
</aside>
</div>
<div class="column">
<nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-pencil-ruler" aria-hidden="true"></i> Orden de corte layer</p>

View File

@ -3,40 +3,9 @@
{{define "body"}}
<div class="container is-fluid">
<hr>
<h3 class="title is-3">Orden fabricación</h3>
<div class="columns">
<div class="column is-one-fifth">
<aside class="menu">
<p class="menu-label">Panel</p>
<ul class="menu-list">
<li><a href="/">Inicio</a></li>
</ul>
<p class="menu-label">Etiquetas leídas</p>
<ul class="menu-list">
<li><a href="/barcodes">Consultar</a></li>
</ul>
<p class="menu-label">Paquetes</p>
<ul class="menu-list">
<li><a href="/bundle">Consultar</a></li>
</ul>
<p class="menu-label">Datos de fabricación</p>
<ul class="menu-list">
<li><a href="/po">Orden de producción</a></li>
<li><a href="/co">Orden de cliente</a></li>
<li><a href="/bcp">Orden de corte placa</a></li>
<li><a href="/lcp">Orden de corte layer</a></li>
<li><a href="/hbcp">Hoja BCP</a></li>
</ul>
<p class="menu-label">Calidad</p>
<ul class="menu-list">
<li><a href="/standards">Normas</a></li>
</ul>
<p class="menu-label">Etiquetas</p>
<ul class="menu-list">
<li><a href="/labels">Ultimas etiquetas</a></li>
</ul>
</aside>
</div>
<div class="column">
<nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-industry" aria-hidden="true"></i> Orden de producción</p>

20
types/stats.go Normal file
View File

@ -0,0 +1,20 @@
package types
import "time"
type Stats struct {
PaquetesEtiquetados int
EtiquetasLeidas int
PaquetesConfirmados int
PaquetesPrimeras int
ToneladasPrimeras float64
PaquetesSegundas int
ToneladasSegundas float64
PaquetesPendientes int
ToneladasPendientes float64
PaquetesCortas int
ToneladasCortas float64
DesvioPromedio float64
FechaInicio time.Time
FechaFinal time.Time
}