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"` <div class="columns">
Po int `json:"po" gorm:"index"` <div class="column is-one-fifth">
Co int `json:"co"` <aside class="menu">
Colada string `json:"colada"` <p class="menu-label">Panel</p>
Calidad string `json:"calidad"` <ul class="menu-list">
Matnr string `json:"matnr"` <li><a href="/">Inicio</a></li>
Dibujo int `json:"dibujo"` </ul>
Operador string `json:"operador"` <p class="menu-label">Etiquetas leídas</p>
Serie int `json:"serie"` <ul class="menu-list">
Nromatricula string `gorm:"primaryKey" json:"nromatricula"` <li><a href="/barcodes">Consultar</a></li>
NroBulto string `json:"nro_bulto"` </ul>
EtiquetaDoble string `json:"etiqueta_doble"` <p class="menu-label">Paquetes</p>
Fecha int `json:"fecha"` <ul class="menu-list">
Turno string `json:"turno"` <li><a href="/bundle">Consultar</a></li>
Observacion1 string `json:"observacion1"` </ul>
Observacion2 string `json:"observacion2"` <p class="menu-label">Datos de fabricación</p>
Observacion3 string `json:"observacion3"` <ul class="menu-list">
PaqueteLongitud float64 `json:"paquete_longitud"` <li><a href="/po">Orden de producción</a></li>
PaqueteAncho int `json:"paquete_ancho"` <li><a href="/co">Orden de cliente</a></li>
PaqueteAlto float64 `json:"paquete_alto"` <li><a href="/bcp">Orden de corte placa</a></li>
PaquetePeso int `json:"paquete_peso"` <li><a href="/lcp">Orden de corte layer</a></li>
PaqueteNroSecciones int `json:"paquete_nro_secciones"` <li><a href="/hbcp">Hoja BCP</a></li>
PaqueteNroMantos int `json:"paquete_nro_mantos"` </ul>
PaqueteNroSeccManto int `json:"paquete_nro_secc_manto"` <p class="menu-label">Calidad</p>
SeccionTipo string `gorm:"index" json:"seccion_tipo"` <ul class="menu-list">
SeccionLongitud int `json:"seccion_longitud"` <li><a href="/standards">Normas</a></li>
SeccionAncho float64 `json:"seccion_ancho"` </ul>
SeccionAlto float64 `json:"seccion_alto"` <p class="menu-label">Etiquetas</p>
Idioma string `json:"idioma"` <ul class="menu-list">
Destino int `json:"destino"` <li><a href="/labels">Últimas etiquetas</a></li>
Hora int `json:"hora"` </ul>
Horario int `json:"horario"` </aside>
Inst string `json:"inst"` </div>
Tren int `json:"tren"` </div>
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"`

View File

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

View File

@ -3,15 +3,42 @@ package handlers
import ( import (
"net/http" "net/http"
"text/template" "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/storage"
"git.espin.casa/albert/cml04-falcon-ui/types"
"github.com/julienschmidt/httprouter" "github.com/julienschmidt/httprouter"
) )
func IndexHandler(storage storage.Storager) httprouter.Handle { 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) { 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") t, _ := template.ParseFiles("templates/base.html", "templates/index.html")
err := t.Execute(w, nil) err = t.Execute(w, view)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return

View File

@ -1,6 +1,7 @@
package helper package helper
import ( import (
"fmt"
"strings" "strings"
"time" "time"
) )
@ -24,3 +25,27 @@ func Dates(dr string) (start, finish time.Time, err error) {
} }
return 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) 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) 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) 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 { type storage struct {
@ -31,6 +32,14 @@ type storage struct {
mux sync.RWMutex 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. // 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) { 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 { if lb == types.ALL {

View File

@ -4,38 +4,6 @@
<div class="container is-fluid"> <div class="container is-fluid">
<div class="columns"> <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"> <div class="column">
<nav class="panel is-link"> <nav class="panel is-link">
<p class="panel-heading"><i class="far fa-file"></i> Busqueda de códigos</p> <p class="panel-heading"><i class="far fa-file"></i> Busqueda de códigos</p>

View File

@ -17,13 +17,65 @@
</head> </head>
<body> <body>
<div class="notification is-link banner"> <!-- <div class="notification is-link banner">
<p>FALCON <p>FALCON
<figure class="image is-64x64"> <figure class="image is-64x64">
<img src="/assets/img/falcon-transparent-white.png" alt="white falcon" /> <img src="/assets/img/falcon-transparent-white.png" alt="white falcon" />
</figure> </figure>
</p> </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" . }} {{ template "body" . }}

View File

@ -3,40 +3,9 @@
{{define "body"}} {{define "body"}}
<div class="container is-fluid"> <div class="container is-fluid">
<hr>
<h3 class="title is-3">Orden corte placa</h3>
<div class="columns"> <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"> <div class="column">
<nav class="panel is-link"> <nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-pencil-ruler" aria-hidden="true"></i> Orden de corte placa</p> <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"}} {{define "body"}}
<div class="container is-fluid"> <div class="container is-fluid">
<hr>
<h3 class="title is-3">Orden cliente</h3>
<div class="columns"> <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"> <div class="column">
<nav class="panel is-link"> <nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-user-edit" aria-hidden="true"></i> Orden de cliente</p> <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"}} {{define "body"}}
<div class="container is-fluid"> <div class="container is-fluid">
<hr>
<h3 class="title is-3">Hoja cortes</h3>
<div class="columns"> <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"> <div class="column">
<nav class="panel is-link"> <nav class="panel is-link">
<p class="panel-heading"><i class="far fa-file"></i> Hoja patrón corte</p> <p class="panel-heading"><i class="far fa-file"></i> Hoja patrón corte</p>

View File

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

View File

@ -3,40 +3,9 @@
{{define "body"}} {{define "body"}}
<div class="container is-fluid"> <div class="container is-fluid">
<hr>
<h3 class="title is-3">Ordenes de corte layer</h3>
<div class="columns"> <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"> <div class="column">
<nav class="panel is-link"> <nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-pencil-ruler" aria-hidden="true"></i> Orden de corte layer</p> <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"}} {{define "body"}}
<div class="container is-fluid"> <div class="container is-fluid">
<hr>
<h3 class="title is-3">Orden fabricación</h3>
<div class="columns"> <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"> <div class="column">
<nav class="panel is-link"> <nav class="panel is-link">
<p class="panel-heading"><i class="fas fa-industry" aria-hidden="true"></i> Orden de producción</p> <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
}