MoK: Bargeldkassen weiterentwickelt. Werden nur im Debug-Modus angezeigt.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
}
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user