59 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Elwig.Models.Entities;
 | |
| using Microsoft.EntityFrameworkCore;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel.DataAnnotations.Schema;
 | |
| using System.Threading.Tasks;
 | |
| 
 | |
| namespace Elwig.Models.Dtos {
 | |
|     public class WeightBreakdownData : DataTable<WeightBreakdownRow> {
 | |
| 
 | |
|         private static readonly (string, string, string?, int?)[] FieldNames = [
 | |
|             ("Type", "R/W", null, 10),
 | |
|             ("SortId", "Sorte", null, 10),
 | |
|             ("AttrId", "Attr.", null, 10),
 | |
|             ("CultId", "Bewirt.", null, 15),
 | |
|             ("QualId", "Qual.", null, 15),
 | |
|             ("Geb", "gebunden", null, 20),
 | |
|             ("Weight", "Menge", "kg", 20),
 | |
|         ];
 | |
| 
 | |
|         public WeightBreakdownData(IEnumerable<WeightBreakdownRow> rows, int year, string name) :
 | |
|             base(name, $"Sorten-/Qualitätsaufschlüsselung {year}", name, rows, FieldNames) {
 | |
|         }
 | |
| 
 | |
|         public static async Task<WeightBreakdownData> ForSeason(DbSet<WeightBreakdownRow> table, int year, Branch? branch = null) {
 | |
|             return new(await FromDbSet(table, year, branch?.ZwstId), year, branch?.Name ?? "Gesamt");
 | |
|         }
 | |
| 
 | |
|         private static async Task<IEnumerable<WeightBreakdownRow>> FromDbSet(DbSet<WeightBreakdownRow> table, int year, string? zwstid) {
 | |
|             zwstid = zwstid == null ? "NULL" : $"'{zwstid}'";
 | |
|             return await table.FromSqlRaw($"""
 | |
|                 SELECT type, sortid, attrid, cultid, v.qualid, geb, SUM(weight) AS weight
 | |
|                 FROM v_stat_total v
 | |
|                     LEFT JOIN wine_quality_level q ON q.qualid = v.qualid
 | |
|                 WHERE year = {year} AND ({zwstid} IS NULL OR zwstid = {zwstid})
 | |
|                 GROUP BY type, sortid, attrid, cultid, v.qualid, geb
 | |
|                 ORDER BY type DESC, sortid, attrid, cultid, q.min_kmw, geb
 | |
|                 """).ToListAsync();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     [Keyless]
 | |
|     public class WeightBreakdownRow {
 | |
|         [Column("type")]
 | |
|         public required string Type { get; set; }
 | |
|         [Column("sortid")]
 | |
|         public required string SortId { get; set; }
 | |
|         [Column("attrid")]
 | |
|         public string? AttrId { get; set; }
 | |
|         [Column("cultid")]
 | |
|         public string? CultId { get; set; }
 | |
|         [Column("qualid")]
 | |
|         public required string QualId { get; set; }
 | |
|         [Column("geb")]
 | |
|         public required string Geb { get; set; }
 | |
|         [Column("weight")]
 | |
|         public int Weight { get; set; }
 | |
|     }
 | |
| }
 |