MoK: Bargeldkassen weiterentwickelt. Werden nur im Debug-Modus angezeigt.

This commit is contained in:
2023-09-11 15:20:38 +02:00
parent 31e3b05e92
commit 5a794c82ab
6 changed files with 277 additions and 61 deletions

View File

@@ -4,9 +4,6 @@ using System.Globalization;
using System.Linq;
using System.Windows.Data;
using System.Windows.Media;
using BeWo.View;
using BS.Shared;
using BS.Shared.Core;
@@ -37,16 +34,7 @@ namespace BeWo.Converter
var userRights = iEnumerable.ToList();
userRights.Remove(UserRightType.None);
foreach(var right in userRights)
{
if(!EnumTranslations.UserRightType2Translations.ContainsKey(right))
{
}
}
return userRights.Select(right => EnumTranslations.UserRightType2Translations.Single(right2Translation => right2Translation.Key == right)).OrderBy(right2Translation => right2Translation.Value).ToDictionary(right2Translation => right2Translation.Key, right2Translation => right2Translation.Value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

View File

@@ -427,6 +427,80 @@ namespace BeWoPlanerMobil.Controllers
return LeerzeichenFuerGetMethoden;
}
#region Bargeldkassen
// GetBargeldkassenName
// SaveBargeldkassenName
// DeleteBargeldkasse
// DownloadBargeldkassenPdf
// DownloadTransactionPdf
// SaveTransactionSignature
[Authorize]
public string GetBargeldkassenName(long oid)
{
if(Model is null)
{
Logout();
return LeerzeichenFuerGetMethoden;
}
var bargeldkassenname = Model.Bargeldkassen.FirstOrDefault(bargeldkasse => bargeldkasse.BargeldkassenOid.HasValue && bargeldkasse.BargeldkassenOid.Value.Equals(oid))?.Kassenname;
return bargeldkassenname ?? LeerzeichenFuerGetMethoden;
}
// ToDo: Erstmal durch Get
[Authorize]
public string SaveBargeldkassenName(string newName, long oid)
{
if(Model is null)
{
Logout();
return LeerzeichenFuerGetMethoden;
}
var bargeldkasse = Model.Bargeldkassen.FirstOrDefault(bk => bk.BargeldkassenOid.HasValue && bk.BargeldkassenOid.Value.Equals(oid));
if(bargeldkasse is null || string.IsNullOrWhiteSpace(newName) || newName.Equals(bargeldkasse.Kassenname) || Model.SelectedCustomerOid is null)
{
return LeerzeichenFuerGetMethoden;
}
bargeldkasse.Kassenname = newName;
OperationsService.UpdateBargeldkasse(bargeldkasse);
Model.Bargeldkassen = OperationsService.LoadBargeldkassenForObject(TableID.Customer, Model.SelectedCustomerOid.Value);
return LeerzeichenFuerGetMethoden;
}
[Authorize]
[HttpPost]
public ActionResult DeleteBargeldkasse(FormCollection formCollection)
{
if(Model is null || !long.TryParse(formCollection["bk-to-delete-oid"], out var bargeldkassenOid) || Model.SelectedCustomerOid is null)
{
return Logout();
}
var bargeldkasse = Model.Bargeldkassen.FirstOrDefault(f => f.BargeldkassenOid.HasValue && f.BargeldkassenOid.Value.Equals(bargeldkassenOid));
if(bargeldkasse?.BargeldkassenVersion is null)
{
return RedirectToActionPermanent("Customer");
}
var bargeldkassenVersion = bargeldkasse.BargeldkassenVersion.Value;
OperationsService.DeactivateBargeldkasse(bargeldkassenOid, bargeldkassenVersion);
Model.Bargeldkassen = OperationsService.LoadBargeldkassenForObject(TableID.Customer, Model.SelectedCustomerOid.Value);
return RedirectToActionPermanent("Customer");
}
#endregion
}
public enum CustomerReportType

View File

@@ -249,6 +249,42 @@ function cardHeaderClick(chevronId, cardBodyId) {
}
}
function cardHeaderClick2(element, callback) {
try {
if (element === undefined || element === null) {
return;
}
logInfo("card header geklickt");
var jQElement = $(element);
var icon = jQElement.find("svg.chevron-identifier-class");
var collapse = jQElement.next(".collapse");
if (collapse.length) {
$(collapse).toggle();
}
if (icon.length && collapse.length) {
var isDown = $(collapse).css("display") !== "none";
var chevron = $(icon);
var iconToRemove = isDown ? "fa-chevron-down" : "fa-chevron-up";
var iconToAdd = isDown ? "fa-chevron-up" : "fa-chevron-down";
chevron.removeClass(iconToRemove);
chevron.addClass(iconToAdd);
}
if (typeof callback === "function") {
callback();
}
} catch (error) {
showErrorPopup(error);
}
}
// Muss manuell im onclick-Event des Buttons aufgerufen werden
function cardHeaderButtonClick(cardBodyId) {
try {
@@ -263,18 +299,12 @@ function cardHeaderButtonClick(cardBodyId) {
function toggleChevron(chevronId, cardBodyId) {
try {
var isDown = $(cardBodyId).css("display") !== "none";
logInfo3("toggleChevron: is chevron down. " + isDown);
var chevron = $(chevronId);
logInfo3("toggleChevron: chevron exists: " + (chevron.length > 0));
var iconToRemove = isDown ? "fa-chevron-down" : "fa-chevron-up";
logInfo3("toggleChevron: icon to remove: " + iconToRemove);
var iconToAdd = isDown ? "fa-chevron-up" : "fa-chevron-down";
logInfo3("toggleChevron: icon to add: " + iconToAdd);
chevron.removeClass(iconToRemove);
chevron.addClass(iconToAdd);
logInfo3(`toggleChevron: removed ${iconToRemove} and added ${iconToAdd}`);
} catch (error) {
showErrorPopup(error);
}

View File

@@ -952,7 +952,25 @@
{
<!-- Bargeldkassen -->
<div class="col-12 my-3">
@Html.Partial("CustomerBargeldkassen", Model);
<div class="card w-100 h-100">
<div class="card-header" onclick="cardHeaderClick2(this)">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header" id="chevron-customer-bargeldkassen"></i>
</div>
<div class="d-inline d-inline-flex text-bewo-customer-card-header h-100">
<button type="button" class="btn btn-link text-bewo-customer-card-header" style="font-size: 20px;">
Bargeldkassen
</button>
</div>
</div>
<div class="collapse" id="collapse-customer-bargeldkassen">
<div class="card-body">
<div class="container-fluid">
@Html.Partial("CustomerBargeldkassen", Model)
</div>
</div>
</div>
</div>
</div>
}

View File

@@ -1,40 +1,152 @@
@model BeWoPlanerMobil.Models.CustomerModel
<div class="card w-100 h-100">
<div class="card-header" onclick="cardHeaderClick('#chevron-customer-bargeldkassen', '#collapse-customer-bargeldkassen')">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header" id="chevron-customer-bargeldkassen"></i>
</div>
<div class="d-inline d-inline-flex text-bewo-customer-card-header h-100">
<button type="button" class="btn btn-link text-bewo-customer-card-header" style="font-size: 20px;">
Bargeldkassen
</button>
</div>
</div>
<div class="collapse" id="collapse-customer-bargeldkassen">
<div class="card-body">
@*
Name (editierbar)
Button "Zahlung hinzufügen"
Label Kassenbestand
Label Anfangsbestand
Datumsfeld Startdatum
Datumsfeld Enddatum
Link Kassenbuch drucken
Tabelle "Ein- und Auszahlungen"
Spalte "Datum"
Spalte "Art"
Spalte "Betrag"
Spalte "Belegnummer"
Spalte "Angelgt von"
Spalte "Notiz"
Spalte "Zahlungsbeleg drucken"
*@
@foreach(var bargeldkasse in Model.Bargeldkassen)
{
<p>@bargeldkasse.Kassenname</p>
}
@*
Name (editierbar)
Button "Zahlung hinzufügen"
Label Kassenbestand
Label Anfangsbestand
Datumsfeld Startdatum
Datumsfeld Enddatum
Link Kassenbuch drucken (Button mit Druckerlogo)
Tabelle "Ein- und Auszahlungen"
Spalte "Datum"
Spalte "Art"
Spalte "Betrag"
Spalte "Belegnummer"
Spalte "Angelgt von"
Spalte "Notiz"
Spalte "Zahlungsbeleg drucken" (Button mit Druckerlogo)
ToDo: In einklappbaren Cards anzeigen
<div class="card w-100 h-100">
<div class="card-header" onclick="cardHeaderClick('#chevron-customer-bargeldkassen', '#collapse-customer-bargeldkassen')">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header" id="chevron-customer-bargeldkassen"></i>
</div>
<div class="d-inline d-inline-flex text-bewo-customer-card-header h-100">
<button type="button" class="btn btn-link text-bewo-customer-card-header" style="font-size: 20px;">
Bargeldkassen
</button>
</div>
</div>
<div class="collapse" id="collapse-customer-bargeldkassen">
<div class="card-body">
ToDo: Liste mit den Einträgen
</div>
</div>
</div>
</div>
*@
<script type="text/javascript">
function resizeButtons() {
try {
var btnGroupMaxWidth = getMaxWidth("bk-btn-group");
if(btnGroupMaxWidth > 0) {
$(".bk-btn-group").width(btnGroupMaxWidth);
}
var dateInputMaxWidth = getMaxWidth("date-input-prepend-group");
if(dateInputMaxWidth > 0) {
$(".date-input-prepend-group").width(dateInputMaxWidth);
}
} catch(error) {
showErrorPopup(error);
}
}
function editBtnClickTest() {
try {
event.stopPropagation();
} catch(error) {
showErrorPopup(error);
}
}
function deleteBtnClickTest() {
try {
event.stopPropagation();
// ToDo: Abfragen, ob wirklich gelöscht werden soll.
} catch(error) {
showErrorPopup(error);
}
}
</script>
@foreach(var bargeldkasse in Model.Bargeldkassen)
{
<!-- Breite < lg -->
<div class="col-sm-12 d-lg-none mx-0 px-0">
<div class="card w-100 h-100">
<div class="card-header" onclick="cardHeaderClick2(this)">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header chevron-identifier-class"></i>
</div>
<div class="d-inline d-inline-flex text-bewo-customer-card-header h-100">
<button class="btn btn-link text-bewo-customer-card-header" type="button">
@bargeldkasse.Kassenname
</button>
</div>
<div class="d-inline d-inline-flex float-right">
<button class="btn btn-primary" type="button" onclick="editBtnClickTest()">
<i class="fas fa-edit"></i>
</button>
<button class="btn btn-danger ml-1" type="button" onclick="deleteBtnClickTest()">
<i class="fas fa-trash-alt"></i>
</button>
</div>
</div>
<div class="collapse">
<div class="card-body">
<div class="container-fluid px-0">
@{
var kassenbestand = "Kommt noch!";
var anfangsbestand = bargeldkasse.Anfangsbestand?.ToString("#.## €") ?? "0,00 €";
}
<div class="row">
<div class="col-auto mr-auto text-secondary">
Kassenbestand:
</div>
<div class="col-auto">
</div>
</div>
<div class="row">
<div class="col-auto mr-auto text-secondary">
Anfangsbestand:
</div>
<div class="col-auto">
@anfangsbestand
</div>
</div>
<div class="row">
<div class="col-auto mr-auto text-secondary">
Startdatum:
</div>
<div class="col-auto">
</div>
</div>
<div class="row">
<div class="col-auto mr-auto text-secondary">
Enddatum:
</div>
<div class="col-auto">
31.08.2023
</div>
</div>
<hr/>
</div>
</div>
</div>
</div>
</div>
<!-- Breite >= lg -->
<div class="col-12 d-none d-lg-block mx-0 px-0"></div>
}

View File

@@ -1,16 +1,10 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
namespace BeWo.Service.Plugins
{