Click here to Skip to main content
15,889,863 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I work in project work in asp.net core 2.1 visual studio 2017 SQL Server 2012


I actually need to make entry form Sales Order consist from Sales Header Model and Sales Footer model


on Sales Order Entry Form

CSS
on Header(represent by Sales Header Model) 
SalesOrderNO   1
SalesYear      2019
SalesDate      2019-01-17
BranchCode     1
SalesTypeNo    1
CustomerNo     2509
on Footer(represent by Sales Footer Model)
SalesLineNo ItemCode  Quantity  Price Total
1            12929       5        10   50
2            17918       4         5   20


Result of Process above when Save the Order


One record added to Sales Header Table.
Two record added to Sales Footer Table.


so that what Model I will select it to be based of Sales Order (Sales Footer Or Sales Header) :

What I have tried:

<pre lang="c#">Sales Header Model
public int SalesOrderNo { get; set; }
public int SalesYear { get; set; }
public int BranchCode { get; set; }
public int SalesType { get; set; }
public DateTime SalesDate { get; set; }
public int CustomerID { get; set; }
public Customer Customers { get; set; }
public ICollection<SalesFooter> SalesFooters { get; set; }


Sales Footer model
public int SalesOrderNo { get; set; }
public int SalesLineNo { get; set; }
public int SalesType { get; set; }
public int BranchCode { get; set; }
public string ItemCode { get; set; }
public decimal Quantity { get; set; }
public decimal UnitPrice { get; set; }
public decimal Total { get; set; }
public Items Itemes { get; set; }
public SalesHeader SaleHeaders { get; set; }
Posted
Updated 17-Jan-19 21:14pm

Your SalesHeader model contains all the "basic" order information AND the last property of that model is a collection of all the SalesHeader items (the details). For this reason I would use fully populated SalesHeader as the SalesOrder.

IF the SalesHeader did not contain the SalesHeader collection, I would suggest a new model, SalesOrder, which would have 2 properties; SalesHeader and SalesFooter.
 
Share this answer
 
Comments
ahmed_sa 17-Jan-19 18:44pm    
thank you for reply
and what about properties of sales footer hot to get them
MadMyche 17-Jan-19 21:01pm    
enumerate the list
foreach(SalesFooter sf in SalesFooters) {
  // do what you want with "sf" object instance
}
Take a closer look at your models, especially at underlined lines:

Sales Header Model
C#
public int SalesOrderNo { get; set; }  //1
public int SalesYear { get; set; }
public int BranchCode { get; set; }
public int SalesType { get; set; } //2
public DateTime SalesDate { get; set; }
public int CustomerID { get; set; }
public Customer Customers { get; set; }
public ICollection<SalesFooter> SalesFooters { get; set; } //3


Sales Footer model
C#
public int SalesOrderNo { get; set; } //1
public int SalesLineNo { get; set; }
public int SalesType { get; set; } //2
public int BranchCode { get; set; }
public string ItemCode { get; set; }
public decimal Quantity { get; set; }
public decimal UnitPrice { get; set; }
public decimal Total { get; set; }
public Items Itemes { get; set; }
public SalesHeader SaleHeaders { get; set; } //3


1. SalesOrder is common part of both models.

2. SalesType, similary to SalesOrder, is common part of both models.

3. Collections of SalesHeader and SalesFooter are related to each other.

This sounds like bad design!

In your case, you need to create one-to-many relationship, where
SalesOrder         SalesOrderDetails
SalesOrderNo (PK) 1 -> SalesOrderNo (FK)

* PK - Primary Key
* FK - Foreign Key

Let's illustrate it on real data:
SalesOrders (SalesHeader)
SalesOrderNO   1
SalesYear      2019
SalesDate      2019-01-17
BranchCode     1
SalesTypeNo    1
CustomerNo     2509

SalesOrderDetails (SalesFooter)
SalesOrderNo SalesLineNo ItemCode  Quantity  Price Total
1            1            12929       5        10   50
1            2            17918       4         5   20


So, rewrite your models to mirror above data. Note, that SalesOrderNo field you can hide in view.

Please, read more about Relational database[^]

[EDIT]
Example:
C#
void Main()
{
	
	List<SalesOrder> orders = new List<SalesOrder>()
		{
			new SalesOrder(){SalesOrderNo = 1, SalesDate = new DateTime(2019,1,17), BranchCode = 1, SalesTypeNo = 1, CustomerNo = 2509},
			new SalesOrder(){SalesOrderNo = 2, SalesDate = new DateTime(2019,1,17), BranchCode = 2, SalesTypeNo = 2, CustomerNo = 3945}
		};
		
	List<SalesOrderDetails> details = new List<SalesOrderDetails>()
		{
			new SalesOrderDetails(){SalesDetailNo = 1, SalesOrderNo = 1, SalesLineNo = 1, ItemCode = 12929, Quantity = 5, Price = 10, Total = 50},
			new SalesOrderDetails(){SalesDetailNo = 2, SalesOrderNo = 1, SalesLineNo = 2, ItemCode = 17918, Quantity = 4, Price = 5, Total = 20},
			new SalesOrderDetails(){SalesDetailNo = 3, SalesOrderNo = 1, SalesLineNo = 3, ItemCode = 13546, Quantity = 5, Price = 6, Total = 30},
			new SalesOrderDetails(){SalesDetailNo = 4, SalesOrderNo = 1, SalesLineNo = 4, ItemCode = 11001, Quantity = 100, Price = 7, Total = 700},
			new SalesOrderDetails(){SalesDetailNo = 5, SalesOrderNo = 2, SalesLineNo = 1, ItemCode = 12828, Quantity = 20, Price = 8, Total = 160},
			new SalesOrderDetails(){SalesDetailNo = 6, SalesOrderNo = 2, SalesLineNo = 2, ItemCode = 15467, Quantity = 5, Price = 12, Total = 60},
			new SalesOrderDetails(){SalesDetailNo = 7, SalesOrderNo = 2, SalesLineNo = 3, ItemCode = 18741, Quantity = 3, Price = 30, Total = 90},
			new SalesOrderDetails(){SalesDetailNo = 8, SalesOrderNo = 2, SalesLineNo = 4, ItemCode = 13698, Quantity = 2, Price = 100, Total = 200},
			new SalesOrderDetails(){SalesDetailNo = 9, SalesOrderNo = 2, SalesLineNo = 5, ItemCode = 12587, Quantity = 8, Price = 8, Total = 64},
		};
	
	foreach(SalesOrder SalesHeader in orders)
	{

		Console.WriteLine("\n{0}{1}{2}", new string('=', 3), " Order ", new string('=', 3));
		Console.WriteLine("SalesOrderNo: {0}\nSalesDate: {1}\nSalesYear: {2}\nBranchCode: {3}\nSalesTypeNo: {4}\nCustomerNo: {5}",
			SalesHeader.SalesOrderNo, SalesHeader.SalesDate, SalesHeader.SalesYear, SalesHeader.BranchCode, SalesHeader.SalesTypeNo, SalesHeader.CustomerNo);
		Console.WriteLine("{0}{1}{2}", new string('=', 3), " Order details ", new string('=', 3));
		List<SalesOrderDetails> items = details.Where(x=>x.SalesOrderNo==SalesHeader.SalesOrderNo).ToList();
		foreach(SalesOrderDetails SalesFooter in items)
			{
			Console.WriteLine("SalesLineNo: {0}\tItemCode: {1}\tQuantity: {2}\tPrice: {3}\tTotal: {4}",
				SalesFooter.SalesLineNo, SalesFooter.ItemCode, SalesFooter.Quantity, SalesFooter.Price, SalesFooter.Total);
			}
	}
	
	
		
	
}

// Define other methods and classes here
public class SalesOrder //SalesHeader
{
	public int SalesOrderNo {get; set;}
	public DateTime SalesDate  {get; set;}
	public int SalesYear  {get=>SalesDate.Year;}
	public int BranchCode  {get; set;}
	public int SalesTypeNo  {get; set;}
	public int CustomerNo  {get; set;}
}

public class SalesOrderDetails // SalesFooter
{
	public int SalesDetailNo {get; set;}
	public int SalesOrderNo {get; set;}
	public int SalesLineNo {get; set;}
	public int ItemCode {get; set;}
	public int Quantity {get; set;}
	public decimal Price {get; set;}
	public decimal Total  {get; set;}	
}


Result:
=== Order ===
SalesOrderNo: 1
SalesDate: 2019-01-17 00:00:00
SalesYear: 2019
BranchCode: 1
SalesTypeNo: 1
CustomerNo: 2509
=== Order details ===
SalesLineNo: 1  ItemCode: 12929  Quantity: 5  Price: 10  Total: 50
SalesLineNo: 2  ItemCode: 17918  Quantity: 4  Price: 5  Total: 20
SalesLineNo: 3  ItemCode: 13546  Quantity: 5  Price: 6  Total: 30
SalesLineNo: 4  ItemCode: 11001  Quantity: 100  Price: 7  Total: 700

=== Order ===
SalesOrderNo: 2
SalesDate: 2019-01-17 00:00:00
SalesYear: 2019
BranchCode: 2
SalesTypeNo: 2
CustomerNo: 3945
=== Order details ===
SalesLineNo: 1  ItemCode: 12828  Quantity: 20  Price: 8  Total: 160
SalesLineNo: 2  ItemCode: 15467  Quantity: 5  Price: 12  Total: 60
SalesLineNo: 3  ItemCode: 18741  Quantity: 3  Price: 30  Total: 90
SalesLineNo: 4  ItemCode: 13698  Quantity: 2  Price: 100  Total: 200
SalesLineNo: 5  ItemCode: 12587  Quantity: 8  Price: 8  Total: 64

Good luck!
 
Share this answer
 
v3

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900