hr dan payroll
This commit is contained in:
+160
-18
@@ -77,7 +77,7 @@ body.app-v2 {
|
||||
.drawer-brand small {
|
||||
display: block;
|
||||
color: #a7abb3;
|
||||
font-size: 10px;
|
||||
font-size: 11px;
|
||||
letter-spacing: 1.1px;
|
||||
text-transform: uppercase;
|
||||
margin-top: 2px;
|
||||
@@ -184,10 +184,10 @@ body.app-v2 {
|
||||
color: #fff;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
font-size: 10px;
|
||||
font-size: 11px;
|
||||
}
|
||||
.nav-chevron {
|
||||
font-size: 10px;
|
||||
font-size: 11px;
|
||||
color: #70757e;
|
||||
transition: transform 0.18s;
|
||||
}
|
||||
@@ -260,7 +260,7 @@ body.app-v2 {
|
||||
font-size: 11.5px;
|
||||
}
|
||||
.user-copy small {
|
||||
font-size: 10px;
|
||||
font-size: 11px;
|
||||
color: #8d929b;
|
||||
}
|
||||
.user-copy a,
|
||||
@@ -357,7 +357,7 @@ body.app-v2 {
|
||||
position: static !important;
|
||||
}
|
||||
.app-breadcrumb .breadcrumb {
|
||||
font-size: 11px;
|
||||
font-size: 12px;
|
||||
color: var(--muted);
|
||||
}
|
||||
.app-breadcrumb a {
|
||||
@@ -431,7 +431,7 @@ body.app-v2 {
|
||||
border: 0 !important;
|
||||
border-bottom: 1px solid var(--line) !important;
|
||||
border-radius: 0 !important;
|
||||
font-size: 10px;
|
||||
font-size: 12px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.55px;
|
||||
white-space: nowrap;
|
||||
@@ -703,7 +703,7 @@ body.app-v2 {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 1px;
|
||||
font-size: 9px;
|
||||
font-size: 10px;
|
||||
}
|
||||
.mobile-action-bar i {
|
||||
font-size: 17px;
|
||||
@@ -914,7 +914,7 @@ body.app-v2 {
|
||||
:root {
|
||||
--ui-font: "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||
--ui-font-size: 13px;
|
||||
--ui-table-font-size: 11px;
|
||||
--ui-table-font-size: 12px;
|
||||
--ui-heading-1: 20px;
|
||||
--ui-heading-2: 18px;
|
||||
--ui-heading-3: 17px;
|
||||
@@ -944,12 +944,24 @@ html body.app-v2 {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
html body.app-v2 .app-content h1 { font-size: var(--ui-heading-1) !important; }
|
||||
html body.app-v2 .app-content h2 { font-size: var(--ui-heading-2) !important; }
|
||||
html body.app-v2 .app-content h3 { font-size: var(--ui-heading-3) !important; }
|
||||
html body.app-v2 .app-content h4 { font-size: var(--ui-heading-4) !important; }
|
||||
html body.app-v2 .app-content h5 { font-size: var(--ui-heading-5) !important; }
|
||||
html body.app-v2 .app-content h6 { font-size: var(--ui-heading-6) !important; }
|
||||
html body.app-v2 .app-content h1 {
|
||||
font-size: var(--ui-heading-1) !important;
|
||||
}
|
||||
html body.app-v2 .app-content h2 {
|
||||
font-size: var(--ui-heading-2) !important;
|
||||
}
|
||||
html body.app-v2 .app-content h3 {
|
||||
font-size: var(--ui-heading-3) !important;
|
||||
}
|
||||
html body.app-v2 .app-content h4 {
|
||||
font-size: var(--ui-heading-4) !important;
|
||||
}
|
||||
html body.app-v2 .app-content h5 {
|
||||
font-size: var(--ui-heading-5) !important;
|
||||
}
|
||||
html body.app-v2 .app-content h6 {
|
||||
font-size: var(--ui-heading-6) !important;
|
||||
}
|
||||
|
||||
html body.app-v2 .app-content h1,
|
||||
html body.app-v2 .app-content h2,
|
||||
@@ -1089,11 +1101,141 @@ html body.app-v2 .line-type-switch input:checked + span {
|
||||
}
|
||||
|
||||
html body.app-v2 .company-settings-hero {
|
||||
background: linear-gradient(125deg, #172b4d, #24456f 62%, var(--brand)) !important;
|
||||
background: linear-gradient(
|
||||
125deg,
|
||||
#172b4d,
|
||||
#24456f 62%,
|
||||
var(--brand)
|
||||
) !important;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
html body.app-v2 { font-size: var(--ui-font-size) !important; }
|
||||
html body.app-v2 .app-content h1 { font-size: 19px !important; }
|
||||
html body.app-v2 .app-content h2 { font-size: 17px !important; }
|
||||
html body.app-v2 {
|
||||
font-size: var(--ui-font-size) !important;
|
||||
}
|
||||
html body.app-v2 .app-content h1 {
|
||||
font-size: 19px !important;
|
||||
}
|
||||
html body.app-v2 .app-content h2 {
|
||||
font-size: 17px !important;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Aksen batas kartu global.
|
||||
* Diletakkan di stylesheet utama agar semua modul memakai satu visual yang
|
||||
* konsisten tanpa menambah class atau style pada masing-masing view.
|
||||
*/
|
||||
html body.app-v2 :is(
|
||||
.card,
|
||||
.modern-card,
|
||||
.table-card,
|
||||
.summary-card,
|
||||
.summary-action-card,
|
||||
.metric-card,
|
||||
.dashboard-card,
|
||||
.operational-card,
|
||||
.inventory-card,
|
||||
.tech-card,
|
||||
.asset-card,
|
||||
.invoice-list-card,
|
||||
.editor-card,
|
||||
.item-list-card,
|
||||
.receivable-card,
|
||||
.profile-card,
|
||||
.settings-card,
|
||||
.leave-card,
|
||||
.budget-card,
|
||||
.calendar-card,
|
||||
.schedule-card,
|
||||
.detail-card,
|
||||
.main-card,
|
||||
.scanner-card,
|
||||
.export-card,
|
||||
.adjustment-form-card,
|
||||
.atm-card,
|
||||
.bill-card,
|
||||
.asset-metrics > article
|
||||
) {
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
html body.app-v2 :is(
|
||||
.card,
|
||||
.modern-card,
|
||||
.table-card,
|
||||
.summary-card,
|
||||
.summary-action-card,
|
||||
.metric-card,
|
||||
.dashboard-card,
|
||||
.operational-card,
|
||||
.inventory-card,
|
||||
.tech-card,
|
||||
.asset-card,
|
||||
.invoice-list-card,
|
||||
.editor-card,
|
||||
.item-list-card,
|
||||
.receivable-card,
|
||||
.profile-card,
|
||||
.settings-card,
|
||||
.leave-card,
|
||||
.budget-card,
|
||||
.calendar-card,
|
||||
.schedule-card,
|
||||
.detail-card,
|
||||
.main-card,
|
||||
.scanner-card,
|
||||
.export-card,
|
||||
.adjustment-form-card,
|
||||
.atm-card,
|
||||
.bill-card,
|
||||
.asset-metrics > article
|
||||
)::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 0;
|
||||
left: 16px;
|
||||
right: 16px;
|
||||
height: 3px;
|
||||
border-radius: 0 0 999px 999px;
|
||||
background: linear-gradient(90deg, #172b4d 0%, #315780 58%, var(--brand) 100%);
|
||||
box-shadow: 0 1px 5px rgba(23, 43, 77, 0.14);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@media print {
|
||||
html body.app-v2 :is(
|
||||
.card,
|
||||
.modern-card,
|
||||
.table-card,
|
||||
.summary-card,
|
||||
.summary-action-card,
|
||||
.metric-card,
|
||||
.dashboard-card,
|
||||
.operational-card,
|
||||
.inventory-card,
|
||||
.tech-card,
|
||||
.asset-card,
|
||||
.invoice-list-card,
|
||||
.editor-card,
|
||||
.item-list-card,
|
||||
.receivable-card,
|
||||
.profile-card,
|
||||
.settings-card,
|
||||
.leave-card,
|
||||
.budget-card,
|
||||
.calendar-card,
|
||||
.schedule-card,
|
||||
.detail-card,
|
||||
.main-card,
|
||||
.scanner-card,
|
||||
.export-card,
|
||||
.adjustment-form-card,
|
||||
.atm-card,
|
||||
.bill-card,
|
||||
.asset-metrics > article
|
||||
)::before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,295 +1,596 @@
|
||||
.dashboard-shell {
|
||||
--dash-navy: #172b4d;
|
||||
--dash-muted: #667085;
|
||||
--dash-line: #e4e7ec;
|
||||
--dash-orange: #ee7800;
|
||||
display: grid;
|
||||
gap: 16px;
|
||||
padding-bottom: 18px;
|
||||
--dash-navy: #172b4d;
|
||||
--dash-muted: #667085;
|
||||
--dash-line: #e4e7ec;
|
||||
--dash-orange: #ee7800;
|
||||
display: grid;
|
||||
gap: 16px;
|
||||
padding-bottom: 18px;
|
||||
}
|
||||
|
||||
.dashboard-intro {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 24px;
|
||||
padding: 22px 24px;
|
||||
border: 1px solid rgba(23, 43, 77, .16);
|
||||
border-radius: 16px;
|
||||
color: #fff;
|
||||
background:
|
||||
radial-gradient(circle at 88% 20%, rgba(238, 120, 0, .34), transparent 23rem),
|
||||
linear-gradient(125deg, #142642, #213b62);
|
||||
box-shadow: 0 10px 26px rgba(23, 43, 77, .12);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 24px;
|
||||
padding: 22px 24px;
|
||||
border: 1px solid rgba(23, 43, 77, 0.16);
|
||||
border-radius: 16px;
|
||||
color: #fff;
|
||||
background:
|
||||
radial-gradient(
|
||||
circle at 88% 20%,
|
||||
rgba(238, 120, 0, 0.34),
|
||||
transparent 23rem
|
||||
),
|
||||
linear-gradient(125deg, #142642, #213b62);
|
||||
box-shadow: 0 10px 26px rgba(23, 43, 77, 0.12);
|
||||
}
|
||||
|
||||
.dashboard-eyebrow {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
color: #ffbf7d;
|
||||
font-size: 10px;
|
||||
font-weight: 800;
|
||||
letter-spacing: .15em;
|
||||
text-transform: uppercase;
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
color: #ffbf7d;
|
||||
font-size: 12px;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.15em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.dashboard-intro h2 {
|
||||
margin: 0 0 5px;
|
||||
color: #fff !important;
|
||||
font-size: 20px !important;
|
||||
margin: 0 0 5px;
|
||||
color: #fff !important;
|
||||
font-size: 20px !important;
|
||||
}
|
||||
|
||||
.dashboard-intro p {
|
||||
margin: 0;
|
||||
color: rgba(255, 255, 255, .72);
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
color: rgba(255, 255, 255, 0.72);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.dashboard-period {
|
||||
min-width: 175px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 11px;
|
||||
padding: 10px 13px;
|
||||
border: 1px solid rgba(255, 255, 255, .18);
|
||||
border-radius: 11px;
|
||||
background: rgba(255, 255, 255, .09);
|
||||
min-width: 175px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 11px;
|
||||
padding: 10px 13px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.18);
|
||||
border-radius: 11px;
|
||||
background: rgba(255, 255, 255, 0.09);
|
||||
}
|
||||
|
||||
.dashboard-period > i { color: #ffab51; font-size: 18px; }
|
||||
.dashboard-period span, .dashboard-period small, .dashboard-period strong { display: block; }
|
||||
.dashboard-period small { color: rgba(255, 255, 255, .62); font-size: 10px; }
|
||||
.dashboard-period strong { color: #fff; font-size: 12px; }
|
||||
.dashboard-period > i {
|
||||
color: #ffab51;
|
||||
font-size: 18px;
|
||||
}
|
||||
.dashboard-period span,
|
||||
.dashboard-period small,
|
||||
.dashboard-period strong {
|
||||
display: block;
|
||||
}
|
||||
.dashboard-period small {
|
||||
color: rgba(255, 255, 255, 0.62);
|
||||
font-size: 12px;
|
||||
}
|
||||
.dashboard-period strong {
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.dashboard-metrics {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 12px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.metric-card,
|
||||
.dashboard-card,
|
||||
.dashboard-section,
|
||||
.operational-card {
|
||||
border: 1px solid var(--dash-line);
|
||||
border-radius: 14px;
|
||||
background: #fff;
|
||||
box-shadow: 0 5px 18px rgba(16, 24, 40, .045);
|
||||
border: 1px solid var(--dash-line);
|
||||
border-radius: 14px;
|
||||
background: #fff;
|
||||
box-shadow: 0 5px 18px rgba(16, 24, 40, 0.045);
|
||||
}
|
||||
|
||||
.metric-card {
|
||||
min-width: 0;
|
||||
padding: 16px;
|
||||
min-width: 0;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.metric-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 13px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 13px;
|
||||
}
|
||||
|
||||
.metric-top small { color: #98a2b3; font-size: 10px; }
|
||||
.metric-top small {
|
||||
color: #98a2b3;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.metric-icon,
|
||||
.operational-icon,
|
||||
.attention-status {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
flex: 0 0 auto;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.metric-icon {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: 9px;
|
||||
font-size: 15px;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: 9px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.metric-revenue .metric-icon { color: #087443; background: #e4f8ef; }
|
||||
.metric-expense .metric-icon { color: #b54708; background: #fff0df; }
|
||||
.metric-profit .metric-icon { color: #175cd3; background: #eaf2ff; }
|
||||
.metric-receivable .metric-icon { color: #6938ef; background: #f1edff; }
|
||||
.metric-revenue .metric-icon {
|
||||
color: #087443;
|
||||
background: #e4f8ef;
|
||||
}
|
||||
.metric-expense .metric-icon {
|
||||
color: #b54708;
|
||||
background: #fff0df;
|
||||
}
|
||||
.metric-profit .metric-icon {
|
||||
color: #175cd3;
|
||||
background: #eaf2ff;
|
||||
}
|
||||
.metric-receivable .metric-icon {
|
||||
color: #6938ef;
|
||||
background: #f1edff;
|
||||
}
|
||||
|
||||
.metric-label {
|
||||
display: block;
|
||||
margin-bottom: 4px;
|
||||
color: var(--dash-muted);
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
display: block;
|
||||
margin-bottom: 4px;
|
||||
color: var(--dash-muted);
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.metric-card > strong {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
margin-bottom: 9px;
|
||||
color: #1d2939;
|
||||
font-size: clamp(16px, 1.45vw, 21px);
|
||||
line-height: 1.2;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
margin-bottom: 9px;
|
||||
color: #1d2939;
|
||||
font-size: clamp(16px, 1.45vw, 21px);
|
||||
line-height: 1.2;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.metric-card > a {
|
||||
color: #6941c6;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
text-decoration: none;
|
||||
color: #6941c6;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.metric-comparison { font-size: 10px; font-weight: 650; }
|
||||
.metric-comparison.is-good { color: #078045; }
|
||||
.metric-comparison.is-bad { color: #c4323d; }
|
||||
.metric-comparison.is-neutral { color: #98a2b3; font-weight: 500; }
|
||||
.metric-comparison {
|
||||
font-size: 12px;
|
||||
font-weight: 650;
|
||||
}
|
||||
.metric-comparison.is-good {
|
||||
color: #078045;
|
||||
}
|
||||
.metric-comparison.is-bad {
|
||||
color: #c4323d;
|
||||
}
|
||||
.metric-comparison.is-neutral {
|
||||
color: #98a2b3;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.operational-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 10px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.operational-card {
|
||||
position: relative;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 11px;
|
||||
padding: 13px;
|
||||
color: #344054;
|
||||
text-decoration: none;
|
||||
transition: border-color .16s ease, box-shadow .16s ease;
|
||||
position: relative;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 11px;
|
||||
padding: 13px;
|
||||
color: #344054;
|
||||
text-decoration: none;
|
||||
transition:
|
||||
border-color 0.16s ease,
|
||||
box-shadow 0.16s ease;
|
||||
}
|
||||
|
||||
.operational-card:hover {
|
||||
color: #1d2939;
|
||||
border-color: #ffc68f;
|
||||
box-shadow: 0 8px 22px rgba(16, 24, 40, .08);
|
||||
color: #1d2939;
|
||||
border-color: #ffc68f;
|
||||
box-shadow: 0 8px 22px rgba(16, 24, 40, 0.08);
|
||||
}
|
||||
|
||||
.operational-icon { width: 38px; height: 38px; border-radius: 10px; font-size: 16px; }
|
||||
.operational-icon.orange { color: #b54708; background: #fff2e5; }
|
||||
.operational-icon.blue { color: #175cd3; background: #eff6ff; }
|
||||
.operational-icon.green { color: #087443; background: #e8f8f0; }
|
||||
.operational-icon.purple { color: #6941c6; background: #f2efff; }
|
||||
.operational-card > span:nth-child(2) { min-width: 0; }
|
||||
.operational-card small, .operational-card strong, .operational-card em { display: block; }
|
||||
.operational-card small { color: var(--dash-muted); font-size: 10px; }
|
||||
.operational-card strong { overflow: hidden; color: #1d2939; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.operational-card em { color: #98a2b3; font-size: 9px; font-style: normal; }
|
||||
.operational-icon {
|
||||
width: 38px;
|
||||
height: 38px;
|
||||
border-radius: 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.operational-icon.orange {
|
||||
color: #b54708;
|
||||
background: #fff2e5;
|
||||
}
|
||||
.operational-icon.blue {
|
||||
color: #175cd3;
|
||||
background: #eff6ff;
|
||||
}
|
||||
.operational-icon.green {
|
||||
color: #087443;
|
||||
background: #e8f8f0;
|
||||
}
|
||||
.operational-icon.purple {
|
||||
color: #6941c6;
|
||||
background: #f2efff;
|
||||
}
|
||||
.operational-card > span:nth-child(2) {
|
||||
min-width: 0;
|
||||
}
|
||||
.operational-card small,
|
||||
.operational-card strong,
|
||||
.operational-card em {
|
||||
display: block;
|
||||
}
|
||||
.operational-card small {
|
||||
color: var(--dash-muted);
|
||||
font-size: 12px;
|
||||
}
|
||||
.operational-card strong {
|
||||
overflow: hidden;
|
||||
color: #1d2939;
|
||||
font-size: 13px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.operational-card em {
|
||||
color: #98a2b3;
|
||||
font-size: 11px;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.attention-badge {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 8px;
|
||||
padding: 2px 6px;
|
||||
border-radius: 999px;
|
||||
color: #fff;
|
||||
background: var(--dash-orange);
|
||||
font-size: 8px;
|
||||
font-weight: 700;
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 8px;
|
||||
padding: 2px 6px;
|
||||
border-radius: 999px;
|
||||
color: #fff;
|
||||
background: var(--dash-orange);
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.dashboard-section { padding: 15px 16px; }
|
||||
.section-heading, .dashboard-card-header { display: flex; align-items: center; justify-content: space-between; gap: 14px; }
|
||||
.section-heading { margin-bottom: 12px; }
|
||||
.section-heading h3, .dashboard-card-header h3 { margin: 0; color: #1d2939; font-size: 14px !important; }
|
||||
.section-heading p, .dashboard-card-header p { margin: 3px 0 0; color: var(--dash-muted); font-size: 10px; }
|
||||
.dashboard-section {
|
||||
padding: 15px 16px;
|
||||
}
|
||||
.section-heading,
|
||||
.dashboard-card-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 14px;
|
||||
}
|
||||
.section-heading {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.section-heading h3,
|
||||
.dashboard-card-header h3 {
|
||||
margin: 0;
|
||||
color: #1d2939;
|
||||
font-size: 14px !important;
|
||||
}
|
||||
.section-heading p,
|
||||
.dashboard-card-header p {
|
||||
margin: 3px 0 0;
|
||||
color: var(--dash-muted);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.dashboard-quick-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 9px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 9px;
|
||||
}
|
||||
|
||||
.dashboard-quick-grid > a {
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 10px 11px;
|
||||
border: 1px solid #eaecf0;
|
||||
border-radius: 10px;
|
||||
color: #344054;
|
||||
background: #fbfcfd;
|
||||
text-decoration: none;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 10px 11px;
|
||||
border: 1px solid #eaecf0;
|
||||
border-radius: 10px;
|
||||
color: #344054;
|
||||
background: #fbfcfd;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.dashboard-quick-grid > a:hover { border-color: #ffc68f; background: #fff9f3; }
|
||||
.dashboard-quick-grid > a > i:first-child { color: var(--dash-orange); font-size: 17px; }
|
||||
.dashboard-quick-grid span { min-width: 0; flex: 1; }
|
||||
.dashboard-quick-grid strong, .dashboard-quick-grid small { display: block; }
|
||||
.dashboard-quick-grid strong { font-size: 11px; }
|
||||
.dashboard-quick-grid small { overflow: hidden; color: var(--dash-muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.quick-arrow { color: #98a2b3; font-size: 11px; }
|
||||
.dashboard-quick-grid > a:hover {
|
||||
border-color: #ffc68f;
|
||||
background: #fff9f3;
|
||||
}
|
||||
.dashboard-quick-grid > a > i:first-child {
|
||||
color: var(--dash-orange);
|
||||
font-size: 17px;
|
||||
}
|
||||
.dashboard-quick-grid span {
|
||||
min-width: 0;
|
||||
flex: 1;
|
||||
}
|
||||
.dashboard-quick-grid strong,
|
||||
.dashboard-quick-grid small {
|
||||
display: block;
|
||||
}
|
||||
.dashboard-quick-grid strong {
|
||||
font-size: 11px;
|
||||
}
|
||||
.dashboard-quick-grid small {
|
||||
overflow: hidden;
|
||||
color: var(--dash-muted);
|
||||
font-size: 10px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.quick-arrow {
|
||||
color: #98a2b3;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.dashboard-main-grid,
|
||||
.dashboard-lower-grid {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1.65fr) minmax(300px, .75fr);
|
||||
gap: 12px;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1.65fr) minmax(300px, 0.75fr);
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.dashboard-lower-grid { grid-template-columns: minmax(0, 1.55fr) minmax(300px, .85fr); }
|
||||
.dashboard-card { min-width: 0; overflow: hidden; }
|
||||
.dashboard-card-header { min-height: 64px; padding: 13px 16px; border-bottom: 1px solid #eaecf0; }
|
||||
.dashboard-card-header .form-select { width: 105px; min-height: 34px; }
|
||||
.dashboard-lower-grid {
|
||||
grid-template-columns: minmax(0, 1.55fr) minmax(300px, 0.85fr);
|
||||
}
|
||||
.dashboard-card {
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.dashboard-card-header {
|
||||
min-height: 64px;
|
||||
padding: 13px 16px;
|
||||
border-bottom: 1px solid #eaecf0;
|
||||
}
|
||||
.dashboard-card-header .form-select {
|
||||
width: 105px;
|
||||
min-height: 34px;
|
||||
}
|
||||
|
||||
.chart-container { position: relative; height: 300px; padding: 16px 16px 8px; }
|
||||
.chart-message { position: absolute; inset: 0; place-items: center; color: var(--dash-muted); background: #fff; }
|
||||
.chart-message:not([hidden]) { display: grid; }
|
||||
.chart-container {
|
||||
position: relative;
|
||||
height: 300px;
|
||||
padding: 16px 16px 8px;
|
||||
}
|
||||
.chart-message {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
place-items: center;
|
||||
color: var(--dash-muted);
|
||||
background: #fff;
|
||||
}
|
||||
.chart-message:not([hidden]) {
|
||||
display: grid;
|
||||
}
|
||||
|
||||
.attention-list { display: grid; }
|
||||
.attention-list > a { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 12px 15px; border-bottom: 1px solid #f0f1f3; color: #344054; text-decoration: none; }
|
||||
.attention-list > a:last-child { border-bottom: 0; }
|
||||
.attention-list > a:hover { background: #fafbfc; }
|
||||
.attention-status { width: 32px; height: 32px; border-radius: 9px; }
|
||||
.attention-status.danger { color: #b42318; background: #feeceb; }
|
||||
.attention-status.warning { color: #b54708; background: #fff2e5; }
|
||||
.attention-status.clear { color: #087443; background: #e9f8f1; }
|
||||
.attention-list strong, .attention-list small { display: block; }
|
||||
.attention-list strong { color: #344054; font-size: 11px; }
|
||||
.attention-list small { color: var(--dash-muted); font-size: 9px; }
|
||||
.attention-list > a > b { color: #475467; font-size: 12px; }
|
||||
.attention-list {
|
||||
display: grid;
|
||||
}
|
||||
.attention-list > a {
|
||||
display: grid;
|
||||
grid-template-columns: 34px minmax(0, 1fr) auto;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 12px 15px;
|
||||
border-bottom: 1px solid #f0f1f3;
|
||||
color: #344054;
|
||||
text-decoration: none;
|
||||
}
|
||||
.attention-list > a:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.attention-list > a:hover {
|
||||
background: #fafbfc;
|
||||
}
|
||||
.attention-status {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 9px;
|
||||
}
|
||||
.attention-status.danger {
|
||||
color: #b42318;
|
||||
background: #feeceb;
|
||||
}
|
||||
.attention-status.warning {
|
||||
color: #b54708;
|
||||
background: #fff2e5;
|
||||
}
|
||||
.attention-status.clear {
|
||||
color: #087443;
|
||||
background: #e9f8f1;
|
||||
}
|
||||
.attention-list strong,
|
||||
.attention-list small {
|
||||
display: block;
|
||||
}
|
||||
.attention-list strong {
|
||||
color: #344054;
|
||||
font-size: 12px;
|
||||
}
|
||||
.attention-list small {
|
||||
color: var(--dash-muted);
|
||||
font-size: 11px;
|
||||
}
|
||||
.attention-list > a > b {
|
||||
color: #475467;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.section-link { color: var(--dash-orange); font-size: 10px; font-weight: 700; text-decoration: none; white-space: nowrap; }
|
||||
.dashboard-table-wrap { margin: 0 !important; border: 0 !important; border-radius: 0 !important; }
|
||||
.dashboard-table td:first-child { white-space: nowrap; }
|
||||
.activity-time { color: #475467; font-weight: 650; }
|
||||
.module-chip { display: inline-block; padding: 3px 7px; border-radius: 6px; color: #344054; background: #f2f4f7; font-weight: 650; }
|
||||
.dashboard-table .badge { padding: 4px 7px; border-radius: 999px; text-transform: capitalize; }
|
||||
.dashboard-empty { padding: 32px !important; color: #98a2b3 !important; text-align: center; }
|
||||
.section-link {
|
||||
color: var(--dash-orange);
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.dashboard-table-wrap {
|
||||
margin: 0 !important;
|
||||
border: 0 !important;
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.dashboard-table td:first-child {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.activity-time {
|
||||
color: #475467;
|
||||
font-weight: 650;
|
||||
}
|
||||
.module-chip {
|
||||
display: inline-block;
|
||||
padding: 3px 7px;
|
||||
border-radius: 6px;
|
||||
color: #344054;
|
||||
background: #f2f4f7;
|
||||
font-weight: 650;
|
||||
}
|
||||
.dashboard-table .badge {
|
||||
padding: 4px 7px;
|
||||
border-radius: 999px;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
.dashboard-empty {
|
||||
padding: 32px !important;
|
||||
color: #98a2b3 !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.insight-icon { width: 31px; height: 31px; display: grid; place-items: center; border-radius: 9px; color: #b54708; background: #fff2e5; }
|
||||
.insight-list { max-height: 340px; overflow: auto; }
|
||||
.insight-item { display: flex; align-items: flex-start; gap: 9px; padding: 11px 14px; border-bottom: 1px solid #f0f1f3; font-size: 10px; line-height: 1.55; }
|
||||
.insight-item:last-child { border-bottom: 0; }
|
||||
.insight-item > i { margin-top: 2px; }
|
||||
.insight-item.critical > i { color: #d92d20; }
|
||||
.insight-item.warning > i { color: var(--dash-orange); }
|
||||
.insight-item.info > i { color: #175cd3; }
|
||||
.dashboard-empty-state { min-height: 210px; display: flex; align-items: center; justify-content: center; flex-direction: column; gap: 5px; padding: 24px; color: #98a2b3; text-align: center; }
|
||||
.dashboard-empty-state > i { font-size: 25px; color: #ee7800; }
|
||||
.dashboard-empty-state strong { color: #475467; font-size: 11px; }
|
||||
.dashboard-empty-state span { font-size: 9px; }
|
||||
.insight-icon {
|
||||
width: 31px;
|
||||
height: 31px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
border-radius: 9px;
|
||||
color: #b54708;
|
||||
background: #fff2e5;
|
||||
}
|
||||
.insight-list {
|
||||
max-height: 340px;
|
||||
overflow: auto;
|
||||
}
|
||||
.insight-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 9px;
|
||||
padding: 11px 14px;
|
||||
border-bottom: 1px solid #f0f1f3;
|
||||
font-size: 12px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
.insight-item:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.insight-item > i {
|
||||
margin-top: 2px;
|
||||
}
|
||||
.insight-item.critical > i {
|
||||
color: #d92d20;
|
||||
}
|
||||
.insight-item.warning > i {
|
||||
color: var(--dash-orange);
|
||||
}
|
||||
.insight-item.info > i {
|
||||
color: #175cd3;
|
||||
}
|
||||
.dashboard-empty-state {
|
||||
min-height: 210px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
padding: 24px;
|
||||
color: #98a2b3;
|
||||
text-align: center;
|
||||
}
|
||||
.dashboard-empty-state > i {
|
||||
font-size: 25px;
|
||||
color: #ee7800;
|
||||
}
|
||||
.dashboard-empty-state strong {
|
||||
color: #475467;
|
||||
font-size: 12px;
|
||||
}
|
||||
.dashboard-empty-state span {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
@media (max-width: 1199.98px) {
|
||||
.dashboard-metrics, .operational-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
||||
.dashboard-main-grid, .dashboard-lower-grid { grid-template-columns: 1fr; }
|
||||
.dashboard-metrics,
|
||||
.operational-grid {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
.dashboard-main-grid,
|
||||
.dashboard-lower-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.dashboard-shell { gap: 12px; }
|
||||
.dashboard-intro { align-items: flex-start; flex-direction: column; padding: 18px; }
|
||||
.dashboard-period { min-width: 0; width: 100%; }
|
||||
.dashboard-metrics, .operational-grid { grid-template-columns: 1fr 1fr; gap: 8px; }
|
||||
.metric-card { padding: 13px; }
|
||||
.metric-card > strong { font-size: 16px; }
|
||||
.dashboard-quick-grid { display: flex; overflow-x: auto; padding-bottom: 4px; }
|
||||
.dashboard-quick-grid > a { min-width: 205px; }
|
||||
.chart-container { height: 265px; padding: 12px 8px 6px; }
|
||||
.dashboard-shell {
|
||||
gap: 12px;
|
||||
}
|
||||
.dashboard-intro {
|
||||
align-items: flex-start;
|
||||
flex-direction: column;
|
||||
padding: 18px;
|
||||
}
|
||||
.dashboard-period {
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.dashboard-metrics,
|
||||
.operational-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 8px;
|
||||
}
|
||||
.metric-card {
|
||||
padding: 13px;
|
||||
}
|
||||
.metric-card > strong {
|
||||
font-size: 16px;
|
||||
}
|
||||
.dashboard-quick-grid {
|
||||
display: flex;
|
||||
overflow-x: auto;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
.dashboard-quick-grid > a {
|
||||
min-width: 205px;
|
||||
}
|
||||
.chart-container {
|
||||
height: 265px;
|
||||
padding: 12px 8px 6px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.dashboard-metrics, .operational-grid { grid-template-columns: 1fr; }
|
||||
.dashboard-card-header { align-items: flex-start; }
|
||||
.dashboard-metrics,
|
||||
.operational-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.dashboard-card-header {
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -443,6 +443,12 @@
|
||||
min-height: 360px;
|
||||
}
|
||||
}
|
||||
.invoice-item-modal.editing-line .invoice-batch-list,
|
||||
.invoice-item-modal.editing-line .batch-live-summary,
|
||||
.invoice-item-modal.editing-line .batch-submit-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.invoice-workspace {
|
||||
padding: 12px;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
@media(max-width:1100px){.tech-summary{grid-template-columns:repeat(3,1fr)}.tech-identity{grid-template-columns:repeat(3,1fr)}}
|
||||
@media(max-width:767.98px){.tech-summary{grid-template-columns:repeat(2,1fr)}.tech-two,.tech-form-grid{grid-template-columns:1fr}.tech-identity,.tech-modal-summary{grid-template-columns:1fr 1fr}.tech-card{padding:.8rem}.tech-card-head{display:block}.tech-card-head .btn{margin-top:.6rem;width:100%}.tech-scan{grid-template-columns:1fr}.tech-scan .btn{min-height:46px}.modal.tech-modal .modal-dialog{margin:0;max-width:none;height:100%}.modal.tech-modal .modal-content{min-height:100%;border:0;border-radius:0}.modal.tech-modal .modal-body{overflow:auto}.tech-actions .btn{flex:1 1 46%}}
|
||||
@media(max-width:420px){.tech-identity,.tech-modal-summary{grid-template-columns:1fr}.tech-summary{grid-template-columns:1fr 1fr}.tech-stat{padding:.75rem}.tech-stat strong{font-size:1.15rem}}
|
||||
.tech-stat{position:relative;display:block;border-top:3px solid var(--tech-stat-accent,#2f6fed);color:inherit;text-decoration:none;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.tech-stat:hover{color:inherit;text-decoration:none;transform:translateY(-2px);box-shadow:0 10px 24px rgba(23,40,69,.11)}.tech-stat:focus-visible{outline:3px solid rgba(47,111,237,.22);outline-offset:2px}.tech-stat-link{position:absolute;right:14px;bottom:12px;display:grid;place-items:center;width:25px;height:25px;border-radius:50%;background:color-mix(in srgb,var(--tech-stat-accent,#2f6fed) 12%,white);color:var(--tech-stat-accent,#2f6fed);transition:transform .18s ease}.tech-stat:hover .tech-stat-link{transform:translateX(3px)}.tech-stat-carried{--tech-stat-accent:#2f6fed}.tech-stat-installed{--tech-stat-accent:#159a6b}.tech-stat-inspection{--tech-stat-accent:#f59e0b}.tech-stat-repair{--tech-stat-accent:#f47c00}.tech-stat-damaged{--tech-stat-accent:#dc3545}.tech-stat-lost{--tech-stat-accent:#667085}
|
||||
.tech-bulk-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.tech-bulk-action{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:.75rem;text-align:left;align-items:center;border:1px solid var(--tech-border);border-radius:12px;background:#fff;color:#33435d;padding:.9rem;min-height:78px}.tech-bulk-action i{grid-row:1/3;font-size:1.45rem;color:var(--tech-orange)}.tech-bulk-action strong,.tech-bulk-action small{display:block}.tech-bulk-action small{color:var(--tech-muted)}.tech-bulk-action.active{border-color:var(--tech-navy);background:var(--tech-navy);color:#fff;box-shadow:0 8px 20px rgba(23,40,69,.15)}.tech-bulk-action.active small,.tech-bulk-action.active i{color:#fff}.tech-search-results{margin-top:.6rem;border:1px solid var(--tech-border);border-radius:12px;background:#fff;box-shadow:0 12px 26px rgba(22,38,65,.1);overflow:hidden;max-height:320px;overflow-y:auto}.tech-search-option{width:100%;border:0;border-bottom:1px solid #edf0f5;background:#fff;padding:.75rem .9rem;display:flex;align-items:center;justify-content:space-between;gap:1rem;text-align:left}.tech-search-option:last-child{border-bottom:0}.tech-search-option:hover,.tech-search-option:focus{background:#f2f6fd}.tech-search-option span,.tech-search-option small{display:block}.tech-search-option>span:last-child{text-align:right;white-space:nowrap}.tech-search-option small{color:var(--tech-muted)}.tech-bulk-submit{position:sticky;bottom:.75rem;z-index:10;margin-top:1rem;padding:.85rem 1rem;border:1px solid #ccd5e2;border-radius:14px;background:rgba(255,255,255,.96);box-shadow:0 10px 28px rgba(17,31,52,.13);display:flex;align-items:center;justify-content:space-between;gap:1rem;backdrop-filter:blur(8px)}.tech-bulk-submit small{display:block;color:var(--tech-muted)}
|
||||
@media(max-width:767.98px){.tech-bulk-actions{grid-template-columns:1fr}.tech-bulk-submit{bottom:0;border-radius:12px 12px 0 0;display:block}.tech-bulk-submit .btn{width:100%;margin-top:.65rem}}
|
||||
.tech-search-option{color:#33435d;text-decoration:none}.tech-search-option:hover{color:#172845}
|
||||
|
||||
@@ -382,6 +382,7 @@
|
||||
return {
|
||||
item_id: $(".ajax-item").val() || 0,
|
||||
warehouse_id: $(".ajax-warehouse").val() || 0,
|
||||
editing_line_id: Number($("#invoiceLineForm [name=editing_line_id]").val()) || 0,
|
||||
};
|
||||
},
|
||||
);
|
||||
@@ -541,6 +542,10 @@
|
||||
);
|
||||
form.on("submit", function (e) {
|
||||
e.preventDefault();
|
||||
if (Number(form.find("[name=editing_line_id]").val()) > 0) {
|
||||
stageCurrentLine();
|
||||
return;
|
||||
}
|
||||
if (!batchLines.length)
|
||||
return notify("Masukkan minimal satu item ke daftar.", "warning");
|
||||
var date = form.find("[name=service_date]").val(),
|
||||
@@ -678,22 +683,22 @@
|
||||
notify("Item dimasukkan ke daftar.", "success");
|
||||
}
|
||||
function updateExistingLine(line){
|
||||
var form=$("#invoiceLineForm"),id=Number(form.find("[name=editing_line_id]").val()),button=$("#stageInvoiceLine"),data={service_date:form.find("[name=service_date]").val(),description:line.description,unit:line.unit,qty:line.qty,unit_price:line.unit_price,discount_amount:parseMoney(form.find("[name=batch_discount]").val()),tax_rate:line.tax_rate,notes:line.notes,account_id:line.account_id,counter_account_id:line.counter_account_id||""};
|
||||
var form=$("#invoiceLineForm"),id=Number(form.find("[name=editing_line_id]").val()),button=$("#stageInvoiceLine"),data={line_type:line.line_type,service_date:form.find("[name=service_date]").val(),description:line.description,unit:line.unit,qty:line.qty,unit_price:line.unit_price,discount_amount:parseMoney(form.find("[name=batch_discount]").val()),tax_rate:line.tax_rate,notes:line.notes,account_id:line.account_id,counter_account_id:line.counter_account_id||"",item_id:line.item_id||"",warehouse_id:line.warehouse_id||"",barcodes:JSON.stringify(line.barcodes||[])};
|
||||
button.prop("disabled",true).html('<span class="spinner-border spinner-border-sm"></span> Menyimpan...');
|
||||
post(cfg.base+"invoices/update_line/"+cfg.invoiceId+"/"+id,data).done(function(r){if(!r.status)return notify(r.message,"error");notify(r.message,"success");bootstrap.Modal.getOrCreateInstance(document.getElementById("invoiceItemModal")).hide();if(lineTable)lineTable.ajax.reload(null,false)}).fail(error).always(function(){button.prop("disabled",false).html('<i class="bi bi-save"></i> Simpan Perubahan')});
|
||||
post(cfg.base+"invoices/update_line/"+cfg.invoiceId+"/"+id,data).done(function(r){if(!r.status)return notify(r.message,"error");notify(r.message,"success");var refreshPage=Number(form.data("editing-delivery")||0)>0;bootstrap.Modal.getOrCreateInstance(document.getElementById("invoiceItemModal")).hide();if(refreshPage)setTimeout(function(){location.reload();},350);else if(lineTable)lineTable.ajax.reload(null,false)}).fail(error).always(function(){button.prop("disabled",false).html('<i class="bi bi-save"></i> Simpan Perubahan')});
|
||||
}
|
||||
function editExistingLine(row){
|
||||
var form=$("#invoiceLineForm"),savings=row.line_type==="savings";
|
||||
batchLines=[];form.find("[name=editing_line_id]").val(row.id);$("#invoiceItemModal").addClass("editing-line");$("#invoiceItemModal .modal-title").text("Edit Item Nonbarang");$("#invoiceItemModal .modal-header small").text("Perubahan hanya berlaku pada item Draft yang dipilih.");
|
||||
form.find('[name=line_type][value="'+(savings?'savings':'service')+'"]').prop("checked",true).trigger("change");
|
||||
if(row.line_type==="savings")setSelect(".ajax-liability-account",row.account_id,(row.kode_akun||"")+" - "+(row.nama_akun||""));
|
||||
else setSelect(".ajax-account",row.account_id,(row.kode_akun||"")+" - "+(row.nama_akun||""));
|
||||
form.find("[name=service_date]").val(row.service_date);form.find("[name=description]").val(row.nama_item);form.find("[name=unit]").val(row.unit||"Jasa");form.find("[name=qty]").val(fmt(row.qty));form.find("[name=unit_price]").val(fmt(row.harga));form.find("[name=batch_discount]").val(fmt(row.discount_amount));form.find("[name=tax_rate]").val(row.tax_rate||0);form.find("[name=notes]").val(row.keterangan||"");$("#stageInvoiceLine").html('<i class="bi bi-save"></i> Simpan Perubahan');renderBatchLines();bootstrap.Modal.getOrCreateInstance(document.getElementById("invoiceItemModal")).show();
|
||||
var form=$("#invoiceLineForm"),inventory=row.line_type==="inventory",savings=row.line_type==="savings";
|
||||
batchLines=[];form.find("[name=editing_line_id]").val(row.id);form.data("editing-delivery",Number(row.delivery_line_id||0));$("#invoiceItemModal").addClass("editing-line");$("#invoiceItemModal .modal-title").text("Edit Item Invoice");$("#invoiceItemModal .modal-header small").text(inventory?"Reservasi barang dan jurnal lama akan disesuaikan otomatis. Surat Jalan yang sudah diposting tidak dapat diedit.":"Perubahan hanya berlaku pada item Draft yang dipilih.");
|
||||
form.find('[name=line_type][value="'+row.line_type+'"]').prop("checked",true).trigger("change");form.find("[name=line_type]").prop("disabled",true);
|
||||
if(savings)setSelect(".ajax-liability-account",row.account_id,(row.kode_akun||"")+" - "+(row.nama_akun||""));else setSelect(".ajax-account",row.account_id,(row.kode_akun||"")+" - "+(row.nama_akun||""));
|
||||
if(inventory){selectedItem={id:row.items_id,kode_detail:row.item_code,nama_barang:row.nama_item,harga_jual:row.item_sale_price,tracking_type:row.tracking_type,unit:row.item_unit||row.unit};setSelect(".ajax-warehouse",row.warehouse_id,row.warehouse_name||("Gudang #"+row.warehouse_id));setSelect(".ajax-item",row.items_id,(row.item_code?row.item_code+" - ":"")+row.nama_item);selectedBars=(row.barcode_allocations||[]).map(function(bar){var optionText=bar.barcode+(bar.serial_number?" / "+bar.serial_number:"")+" - tersedia "+qty(bar.available);if(!$(".ajax-barcode option[value='"+bar.id+"']").length)$(".ajax-barcode").append(new Option(optionText,bar.id,true,true));return{id:Number(bar.id),barcode:bar.barcode,serial_number:bar.serial_number||"",available:Number(bar.available),qty:Number(bar.qty),tracking_type:bar.tracking_type||row.tracking_type||"UNIT"};});$(".ajax-barcode").val(selectedBars.map(function(bar){return String(bar.id);})).trigger("change.select2");$("#trackingHint").text((row.tracking_type||"UNIT")+" - "+(row.item_unit||row.unit||"-"));renderBars();}
|
||||
form.find("[name=service_date]").val(row.service_date);form.find("[name=description]").val(row.nama_item);form.find("[name=unit]").val(row.unit||(savings?"Tabungan":"Jasa"));form.find("[name=qty]").val(fmt(row.qty));form.find("[name=unit_price]").val(fmt(row.harga));form.find("[name=batch_discount]").val(fmt(row.discount_amount));form.find("[name=tax_rate]").val(row.tax_rate||0);form.find("[name=notes]").val(row.keterangan||"");$("#stageInvoiceLine").html('<i class="bi bi-save"></i> Simpan Perubahan');renderBatchLines();calcBatch();bootstrap.Modal.getOrCreateInstance(document.getElementById("invoiceItemModal")).show();
|
||||
}
|
||||
function scanExact() {
|
||||
var code = $("#barcodeScan").val().trim();
|
||||
if (!code) return notify("Masukkan atau scan barcode.", "warning");
|
||||
$.getJSON(cfg.base + "invoices/lookup_barcodes", { q: code, exact: 1 })
|
||||
$.getJSON(cfg.base + "invoices/lookup_barcodes", { q: code, exact: 1, editing_line_id: Number($("#invoiceLineForm [name=editing_line_id]").val()) || 0 })
|
||||
.done(function (r) {
|
||||
if (!r.results || r.results.length !== 1)
|
||||
return notify(
|
||||
@@ -703,6 +708,10 @@
|
||||
"warning",
|
||||
);
|
||||
var b = r.results[0];
|
||||
if (selectedItem && (String(selectedItem.id) !== String(b.item_id) || String($(".ajax-warehouse").val() || "") !== String(b.warehouse_id))) {
|
||||
selectedBars = [];
|
||||
renderBars();
|
||||
}
|
||||
setSelect(".ajax-warehouse", b.warehouse_id, b.warehouse_name);
|
||||
setSelect(
|
||||
".ajax-item",
|
||||
@@ -736,7 +745,7 @@
|
||||
});
|
||||
$("#invoiceItemModal").on("hidden.bs.modal", function () {
|
||||
var form=$("#invoiceLineForm");if(!form.length||!form.find("[name=editing_line_id]").val())return;
|
||||
form.find("[name=editing_line_id]").val("");$(this).removeClass("editing-line");$(this).find(".modal-title").text("Tambah Beberapa Item Invoice");$(this).find(".modal-header small").text("Susun maksimal 100 barang, jasa, atau tabungan dalam satu kali penyimpanan.");$("#stageInvoiceLine").html('<i class="bi bi-plus-lg"></i> Masukkan ke Daftar');batchLines=[];form.find("[name=batch_discount]").val("0");form.find('[name=line_type][value="inventory"]').prop("checked",true).trigger("change");resetComposer();renderBatchLines();
|
||||
form.find("[name=editing_line_id]").val("");form.removeData("editing-delivery");form.find("[name=line_type]").prop("disabled",false);$(this).removeClass("editing-line");$(this).find(".modal-title").text("Tambah Beberapa Item Invoice");$(this).find(".modal-header small").text("Susun maksimal 100 barang, jasa, atau tabungan dalam satu kali penyimpanan.");$("#stageInvoiceLine").html('<i class="bi bi-plus-lg"></i> Masukkan ke Daftar');batchLines=[];form.find("[name=batch_discount]").val("0");form.find('[name=line_type][value="inventory"]').prop("checked",true).trigger("change");resetComposer();renderBatchLines();
|
||||
});
|
||||
function setSelect(selector, value, text) {
|
||||
var select = $(selector),
|
||||
@@ -1017,8 +1026,10 @@
|
||||
render: function (d, t, r) {
|
||||
if(cfg.mode !== "edit" || !cfg.permissions.update)return "-";
|
||||
var buttons="";
|
||||
if(["service","savings"].indexOf(r.line_type)>=0)buttons += '<button class="btn btn-sm btn-outline-primary edit-line" data-id="'+r.id+'"><i class="bi bi-pencil"></i></button> ';
|
||||
buttons += '<button class="btn btn-sm btn-outline-danger remove-line" data-id="'+r.id+'"><i class="bi bi-trash"></i></button>';
|
||||
var inventoryLocked=r.line_type==="inventory" && (!!r.stock_posted_at || Number(r.stock_log_id||0)>0);
|
||||
if(inventoryLocked)return '<span class="badge text-bg-secondary" title="Mutasi stok sudah diposting; gunakan retur atau koreksi persediaan"><i class="bi bi-lock"></i> Terkunci</span>';
|
||||
if(["inventory","service","savings"].indexOf(r.line_type)>=0)buttons += '<button type="button" class="btn btn-sm btn-outline-primary edit-line" data-id="'+r.id+'" title="Edit item"><i class="bi bi-pencil"></i></button> ';
|
||||
buttons += '<button type="button" class="btn btn-sm btn-outline-danger remove-line" data-id="'+r.id+'" title="Hapus item"><i class="bi bi-trash"></i></button>';
|
||||
return buttons;
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user