FakturyWeb/Models/Faktura.cs

203 lines
5.5 KiB
C#

using FakturyWeb.Business;
using FakturyWeb.Data;
using Microsoft.VisualBasic.CompilerServices;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace RazorPagesMovie.Models
{
public class FAKTURA
{
public int ID { get; set; }
[Required]
[DisplayName("Zákazník")]
[Range(1, Int32.MaxValue, ErrorMessage = "Vyberte zákazníka ze seznamu")]
public int ZakaznikID { get; set; }
public ZAKAZNIK ZAKAZNIK { get; set; }
public ICollection<POLOZKA> POLOZKY { get; set; }
public ICollection<PLATBA> PLATBY { get; set; }
[DisplayName("Číslo")]
public string CISLO { get; set; }
public int CISLO_ABS { get; set; }
[DataType(DataType.Date)]
[DisplayName("Datum vystavení")]
public DateTime VYSTAVENI { get; set; }
[DataType(DataType.Date)]
[DisplayName("Datum splatnosti")]
public DateTime SPLATNOST { get; set; }
[DisplayName("Dodavatel")]
public string D_PRAJM { get; set; }
[DisplayName("Ulice")]
public string D_ULICE { get; set; }
[DisplayName("Město")]
public string D_MESTO { get; set; }
[DisplayName("PSČ")]
public string D_PSC { get; set; }
[DisplayName("IČ")]
public string D_IC { get; set; }
[DisplayName("DIČ")]
public string D_DIC { get; set; }
[DisplayName("Bankovní účet")]
public string D_BANKA { get; set; }
[DisplayName("Telefon")]
public string D_TELEFON { get; set; }
[DisplayName("E-mail")]
public string D_EMAIL { get; set; }
[DisplayName("Web")]
public string D_WEB { get; set; }
[DisplayName("Odběratel")]
public string O_PRAJM { get; set; }
[DisplayName("Ulice")]
public string O_ULICE { get; set; }
[DisplayName("Město")]
public string O_MESTO { get; set; }
[DisplayName("PSČ")]
public string O_PSC { get; set; }
[DisplayName("IČ")]
public string O_IC { get; set; }
[DisplayName("DIČ")]
public string O_DIC { get; set; }
[DisplayName("Forma úhrady")]
public byte FORMA_UHRADY { get; set; }
[DisplayName("Popis činností")]
public string CINNOSTI { get; set; }
public FAKTURA()
{
VYSTAVENI = DateTime.Today;
SPLATNOST = VYSTAVENI.Date.AddDays(15);
FORMA_UHRADY = 1;
}
public void Init(FakturyWebContext context)
{
SetCisloFaktury(context);
}
private void SetCisloFaktury(FakturyWebContext context)
{
if (!context.UZIVATEL.Any())
{
return;
}
// get nastavení:
UZIVATEL myUzivatel = context.UZIVATEL.First();
D_PRAJM = myUzivatel.PRAJM;
D_ULICE = myUzivatel.ULICE;
D_PSC = myUzivatel.PSC;
D_MESTO = myUzivatel.MESTO;
D_IC = myUzivatel.IC;
D_DIC = myUzivatel.DIC;
D_TELEFON = myUzivatel.TELEFON;
D_EMAIL = myUzivatel.EMAIL;
D_BANKA = myUzivatel.BANKA;
D_WEB = myUzivatel.WEB;
//číslo faktury:
int poslCislo = 0;
if (myUzivatel.FAKTURA_CISLOVANI == 1) // po roce...
{
poslCislo = (from f in context.FAKTURA
where f.VYSTAVENI.Year == VYSTAVENI.Year
orderby f.CISLO_ABS descending
select f.CISLO_ABS).FirstOrDefault();
CISLO_ABS = poslCislo + 1;
}
else // po měsíci...
{
poslCislo = (from f in context.FAKTURA
where f.VYSTAVENI.Year == this.VYSTAVENI.Year & f.VYSTAVENI.Month == this.VYSTAVENI.Month
orderby f.CISLO_ABS descending
select f.CISLO_ABS).FirstOrDefault();
CISLO_ABS = poslCislo + 1;
}
// formát čísla:
string myCislo = "";
try
{
var myParser = new ParserFakturaCislo(myUzivatel.FAKTURA_MASKA);
myParser.Parse();
foreach (var symb in myParser.logic)
{
switch (symb.GetTyp)
{
case var @case when Operators.ConditionalCompareObjectEqual(@case, SymbolEnum.CISLO2, false):
{
myCislo += CISLO_ABS.ToString("00");
break;
}
case var case1 when Operators.ConditionalCompareObjectEqual(case1, SymbolEnum.CISLO4, false):
{
myCislo += CISLO_ABS.ToString("0000");
break;
}
case var case2 when Operators.ConditionalCompareObjectEqual(case2, SymbolEnum.CISLO6, false):
{
myCislo += CISLO_ABS.ToString("000000");
break;
}
case var case3 when Operators.ConditionalCompareObjectEqual(case3, SymbolEnum.ROK, false):
{
myCislo += VYSTAVENI.ToString("yyyy");
break;
}
case var case4 when Operators.ConditionalCompareObjectEqual(case4, SymbolEnum.MESIC, false):
{
myCislo += VYSTAVENI.ToString("MM");
break;
}
case var case5 when Operators.ConditionalCompareObjectEqual(case5, SymbolEnum.TEXT, false):
{
myCislo += symb.ToString();
break;
}
}
}
}
catch (Exception ex)
{
myCislo = "0";
}
if (myCislo.Length > 20)
{
//VystrazneHlaseni("Číslo faktury může mít maximálně 20 znaků. Číslo faktury bude oříznuto.");
//myCislo = Strings.Left(myCislo, 20);
}
CISLO = myCislo;
}
}
}