Shares can be handled by owners

This commit is contained in:
2021-03-13 17:06:01 +01:00
parent b25c6fd538
commit a99115a031
12 changed files with 213 additions and 49 deletions

View File

@ -1,8 +1,12 @@
using System; using System;
using System.Collections.Generic;
using DataDomain;
namespace StockBL.Interface namespace StockBL.Interface
{ {
public class IPersonStockFacade public interface IPersonStockFacade
{ {
IEnumerable<StockMember> GetAllSharesConnectedTo(int personId);
System.Collections.Generic.IEnumerable<StockMember> GetUnconnectedShares();
} }
} }

View File

@ -4,4 +4,8 @@
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DataDomain\DataDomain.csproj" />
</ItemGroup>
</Project> </Project>

View File

@ -1,10 +1,47 @@
using StockBL.Interface; using DataDomain;
using StockBL.Interface;
using StockDAL.Interface;
using System; using System;
using System.Collections.Generic;
using System.Linq;
namespace StockBL namespace StockBL
{ {
public class PersonStockFacade : IPersonStockFacade public class PersonStockFacade : IPersonStockFacade
{ {
private readonly IStockPersonConnect _stockPersonConnect;
private readonly IStockRepository _stockRepository;
public PersonStockFacade(IStockPersonConnect stockPersonConnect, IStockRepository stockRepository)
{
_stockPersonConnect = stockPersonConnect;
_stockRepository = stockRepository;
}
public IEnumerable<StockMember> GetUnconnectedShares()
{
var stockList = _stockRepository.GetAllStocks();
var connectList = _stockPersonConnect.GetAllConnectedStocks();
var stcList = (from st in stockList
where connectList.Any(co => st.Id == co.StockId)
select st).ToList();
var sList = stockList.Except(stcList).ToList();
return sList;
}
public IEnumerable<StockMember> GetAllSharesConnectedTo(int personId)
{
var personConnections = _stockPersonConnect.GetAllConnectionsByPersId(personId);
var stockList = _stockRepository.GetAllStocks();
var stcList = (from st in stockList
where personConnections.Any(pc => st.Id == pc.StockId)
select st).ToList();
return stcList;
}
} }
} }

View File

@ -5,7 +5,10 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\DataDomain\DataDomain.csproj" />
<ProjectReference Include="..\DatamodelLibrary\DatamodelLibrary.csproj" />
<ProjectReference Include="..\StockBL.Interface\StockBL.Interface.csproj" /> <ProjectReference Include="..\StockBL.Interface\StockBL.Interface.csproj" />
<ProjectReference Include="..\StockDal.Interface\StockDAL.Interface.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -20,6 +20,15 @@ namespace StockDAL
return connections; return connections;
} }
public IEnumerable<PersonStock> GetAllConnectedStocks()
{
using var context = new StockContext();
var entities = (from spc in context.PersonStocks
where spc.PersonId != 0
select spc).ToList();
return entities;
}
public PersonStock SavePersonStockConnection(PersonStock personStock) public PersonStock SavePersonStockConnection(PersonStock personStock)
{ {
using var context = new StockContext(); using var context = new StockContext();
@ -46,5 +55,18 @@ namespace StockDAL
return entity; return entity;
} }
public void RemoveConnectedShare(PersonStock personStock)
{
using var context = new StockContext();
var entity = (from ps in context.PersonStocks
where ps.StockId == personStock.StockId
select ps).FirstOrDefault();
if (entity != null)
{
context.PersonStocks.Remove(entity);
context.SaveChanges();
}
}
} }
} }

View File

@ -9,7 +9,9 @@ namespace StockDAL.Interface
{ {
public interface IStockPersonConnect public interface IStockPersonConnect
{ {
IEnumerable<PersonStock> GetAllConnectedStocks();
IEnumerable<PersonStock> GetAllConnectionsByPersId(int personId); IEnumerable<PersonStock> GetAllConnectionsByPersId(int personId);
void RemoveConnectedShare(PersonStock personStock);
PersonStock SavePersonStockConnection(PersonStock personStock); PersonStock SavePersonStockConnection(PersonStock personStock);
} }
} }

View File

@ -1,4 +1,6 @@
using Autofac; using Autofac;
using StockBL;
using StockBL.Interface;
using StockDal; using StockDal;
using StockDal.Interface; using StockDal.Interface;
using StockDAL; using StockDAL;
@ -24,7 +26,14 @@ namespace StockInfo
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
Container = Configure(); Container = Configure();
Application.Run(new frmInitial( Container.Resolve<IStockRepository>(), Container.Resolve<IStockMarketRepository>(), Container.Resolve<IPersonRepository>(), Container.Resolve<IAddressRepository>(), Container.Resolve<IStockPersonConnect>())); Application.Run(new frmInitial(
Container.Resolve<IStockRepository>(),
Container.Resolve<IStockMarketRepository>(),
Container.Resolve<IPersonRepository>(),
Container.Resolve<IAddressRepository>(),
Container.Resolve<IStockPersonConnect>(),
Container.Resolve<IPersonStockFacade>()
));
} }
static IContainer Configure() static IContainer Configure()
@ -35,6 +44,7 @@ namespace StockInfo
builder.RegisterType<PersonRepository>().As<IPersonRepository>(); builder.RegisterType<PersonRepository>().As<IPersonRepository>();
builder.RegisterType<AddressRepository>().As<IAddressRepository>(); builder.RegisterType<AddressRepository>().As<IAddressRepository>();
builder.RegisterType<StockPersonConnect>().As<IStockPersonConnect>(); builder.RegisterType<StockPersonConnect>().As<IStockPersonConnect>();
builder.RegisterType<PersonStockFacade>().As<IPersonStockFacade>();
builder.RegisterType<frmInitial>(); builder.RegisterType<frmInitial>();
return builder.Build(); return builder.Build();
} }

View File

@ -26,6 +26,8 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\DataDomain\DataDomain.csproj" /> <ProjectReference Include="..\DataDomain\DataDomain.csproj" />
<ProjectReference Include="..\Helpers\Helpers.csproj" /> <ProjectReference Include="..\Helpers\Helpers.csproj" />
<ProjectReference Include="..\StockBL.Interface\StockBL.Interface.csproj" />
<ProjectReference Include="..\StockBL\StockBL.csproj" />
<ProjectReference Include="..\StockDal.Interface\StockDAL.Interface.csproj" /> <ProjectReference Include="..\StockDal.Interface\StockDAL.Interface.csproj" />
<ProjectReference Include="..\StockDAL\StockDAL.csproj" /> <ProjectReference Include="..\StockDAL\StockDAL.csproj" />
</ItemGroup> </ItemGroup>

View File

@ -13,6 +13,7 @@ using System.Windows.Forms;
using System.Text.Json; using System.Text.Json;
using System.IO; using System.IO;
using Helpers; using Helpers;
using StockBL.Interface;
namespace StockInfo namespace StockInfo
{ {
@ -23,6 +24,7 @@ namespace StockInfo
private readonly IPersonRepository _personRepository; private readonly IPersonRepository _personRepository;
private readonly IAddressRepository _addressRepository; private readonly IAddressRepository _addressRepository;
private readonly IStockPersonConnect _stockPersonConnect; private readonly IStockPersonConnect _stockPersonConnect;
private readonly IPersonStockFacade _personStockFacade;
private frmRegisterStock regWindow; private frmRegisterStock regWindow;
private frmMyStocks stockWindow; private frmMyStocks stockWindow;
private frmSelling sellWindow; private frmSelling sellWindow;
@ -35,7 +37,8 @@ namespace StockInfo
IStockMarketRepository stockMarketRepository, IStockMarketRepository stockMarketRepository,
IPersonRepository personRepository, IPersonRepository personRepository,
IAddressRepository addressRepository, IAddressRepository addressRepository,
IStockPersonConnect stockPersonConnect) IStockPersonConnect stockPersonConnect,
IPersonStockFacade personStockFacade)
{ {
InitializeComponent(); InitializeComponent();
_stockRepository = stockMemberRepository; _stockRepository = stockMemberRepository;
@ -43,6 +46,7 @@ namespace StockInfo
_personRepository = personRepository; _personRepository = personRepository;
_addressRepository = addressRepository; _addressRepository = addressRepository;
_stockPersonConnect = stockPersonConnect; _stockPersonConnect = stockPersonConnect;
_personStockFacade = personStockFacade;
} }
private void Form1_Load(object sender, EventArgs e) private void Form1_Load(object sender, EventArgs e)
@ -191,7 +195,7 @@ namespace StockInfo
else else
{ {
var person = _personRepository.GetPersonById(SelectedPersonId); var person = _personRepository.GetPersonById(SelectedPersonId);
personShareConnect = new frmPersonShareConnect(); personShareConnect = new frmPersonShareConnect(_personStockFacade,_stockPersonConnect,_stockRepository);
Cursor.Current = Cursors.WaitCursor; Cursor.Current = Cursors.WaitCursor;
personShareConnect.ConnectPerson = person; personShareConnect.ConnectPerson = person;
Cursor.Current = DefaultCursor; Cursor.Current = DefaultCursor;

View File

@ -31,11 +31,12 @@ namespace StockInfo
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmPersonShareConnect)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmPersonShareConnect));
this.lstShares = new System.Windows.Forms.ListBox(); this.lstShares = new System.Windows.Forms.ListBox();
this.listBox1 = new System.Windows.Forms.ListBox(); this.lstPersConnected = new System.Windows.Forms.ListBox();
this.btnToPerson = new System.Windows.Forms.Button(); this.btnDisconnect = new System.Windows.Forms.Button();
this.lblShareHolder = new System.Windows.Forms.Label(); this.lblShareHolder = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button(); this.btnConnect = new System.Windows.Forms.Button();
this.btnClose = new System.Windows.Forms.Button();
this.SuspendLayout(); this.SuspendLayout();
// //
// lstShares // lstShares
@ -47,23 +48,24 @@ namespace StockInfo
this.lstShares.Size = new System.Drawing.Size(173, 349); this.lstShares.Size = new System.Drawing.Size(173, 349);
this.lstShares.TabIndex = 0; this.lstShares.TabIndex = 0;
// //
// listBox1 // lstPersConnected
// //
this.listBox1.FormattingEnabled = true; this.lstPersConnected.FormattingEnabled = true;
this.listBox1.ItemHeight = 15; this.lstPersConnected.ItemHeight = 15;
this.listBox1.Location = new System.Drawing.Point(270, 35); this.lstPersConnected.Location = new System.Drawing.Point(270, 35);
this.listBox1.Name = "listBox1"; this.lstPersConnected.Name = "lstPersConnected";
this.listBox1.Size = new System.Drawing.Size(173, 349); this.lstPersConnected.Size = new System.Drawing.Size(173, 349);
this.listBox1.TabIndex = 1; this.lstPersConnected.TabIndex = 1;
// //
// btnToPerson // btnDisconnect
// //
this.btnToPerson.Image = ((System.Drawing.Image)(resources.GetObject("btnToPerson.Image"))); this.btnDisconnect.Image = ((System.Drawing.Image)(resources.GetObject("btnDisconnect.Image")));
this.btnToPerson.Location = new System.Drawing.Point(214, 202); this.btnDisconnect.Location = new System.Drawing.Point(214, 202);
this.btnToPerson.Name = "btnToPerson"; this.btnDisconnect.Name = "btnDisconnect";
this.btnToPerson.Size = new System.Drawing.Size(49, 23); this.btnDisconnect.Size = new System.Drawing.Size(49, 23);
this.btnToPerson.TabIndex = 2; this.btnDisconnect.TabIndex = 2;
this.btnToPerson.UseVisualStyleBackColor = true; this.btnDisconnect.UseVisualStyleBackColor = true;
this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click);
// //
// lblShareHolder // lblShareHolder
// //
@ -83,25 +85,37 @@ namespace StockInfo
this.label1.TabIndex = 4; this.label1.TabIndex = 4;
this.label1.Text = "Uncoupled Shares"; this.label1.Text = "Uncoupled Shares";
// //
// button1 // btnConnect
// //
this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image"))); this.btnConnect.Image = ((System.Drawing.Image)(resources.GetObject("btnConnect.Image")));
this.button1.Location = new System.Drawing.Point(215, 173); this.btnConnect.Location = new System.Drawing.Point(215, 173);
this.button1.Name = "button1"; this.btnConnect.Name = "btnConnect";
this.button1.Size = new System.Drawing.Size(49, 23); this.btnConnect.Size = new System.Drawing.Size(49, 23);
this.button1.TabIndex = 5; this.btnConnect.TabIndex = 5;
this.button1.UseVisualStyleBackColor = true; this.btnConnect.UseVisualStyleBackColor = true;
this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
//
// btnClose
//
this.btnClose.Location = new System.Drawing.Point(422, 415);
this.btnClose.Name = "btnClose";
this.btnClose.Size = new System.Drawing.Size(75, 23);
this.btnClose.TabIndex = 6;
this.btnClose.Text = "Close";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
// //
// frmPersonShareConnect // frmPersonShareConnect
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(509, 450); this.ClientSize = new System.Drawing.Size(509, 450);
this.Controls.Add(this.button1); this.Controls.Add(this.btnClose);
this.Controls.Add(this.btnConnect);
this.Controls.Add(this.label1); this.Controls.Add(this.label1);
this.Controls.Add(this.lblShareHolder); this.Controls.Add(this.lblShareHolder);
this.Controls.Add(this.btnToPerson); this.Controls.Add(this.btnDisconnect);
this.Controls.Add(this.listBox1); this.Controls.Add(this.lstPersConnected);
this.Controls.Add(this.lstShares); this.Controls.Add(this.lstShares);
this.Name = "frmPersonShareConnect"; this.Name = "frmPersonShareConnect";
this.Text = "frmPersonShareConnect"; this.Text = "frmPersonShareConnect";
@ -114,10 +128,11 @@ namespace StockInfo
#endregion #endregion
private System.Windows.Forms.ListBox lstShares; private System.Windows.Forms.ListBox lstShares;
private System.Windows.Forms.ListBox listBox1; private System.Windows.Forms.ListBox lstPersConnected;
private System.Windows.Forms.Button btnToPerson; private System.Windows.Forms.Button btnDisconnect;
private System.Windows.Forms.Label lblShareHolder; private System.Windows.Forms.Label lblShareHolder;
private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button1; private System.Windows.Forms.Button btnConnect;
private System.Windows.Forms.Button btnClose;
} }
} }

View File

@ -1,4 +1,6 @@
using DataDomain; using DataDomain;
using StockBL.Interface;
using StockDAL.Interface;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -13,16 +15,75 @@ namespace StockInfo
{ {
public partial class frmPersonShareConnect : Form public partial class frmPersonShareConnect : Form
{ {
private readonly IPersonStockFacade _personStockFacade;
private readonly IStockPersonConnect _stockPersonConnect;
private readonly IStockRepository _stockRepository;
public Person ConnectPerson { get; set; } public Person ConnectPerson { get; set; }
public frmPersonShareConnect() public frmPersonShareConnect(IPersonStockFacade personStockFacade, IStockPersonConnect stockPersonConnect,IStockRepository stockRepository)
{ {
InitializeComponent(); InitializeComponent();
_personStockFacade = personStockFacade;
_stockPersonConnect = stockPersonConnect;
_stockRepository = stockRepository;
} }
private void frmPersonShareConnect_Shown(object sender, EventArgs e) private void frmPersonShareConnect_Shown(object sender, EventArgs e)
{ {
this.Text = $"{ConnectPerson.Id} - {ConnectPerson.FirstName} {ConnectPerson.LastName}'s Shares"; this.Text = $"{ConnectPerson.Id} - {ConnectPerson.FirstName} {ConnectPerson.LastName}'s Shares";
this.lblShareHolder.Text = $"{ConnectPerson.FirstName} {ConnectPerson.LastName}'s Shares"; this.lblShareHolder.Text = $"{ConnectPerson.FirstName} {ConnectPerson.LastName}'s Shares";
RefreshShareList();
RefreshConnectedList();
}
private void RefreshShareList()
{
var dataSource = _personStockFacade.GetUnconnectedShares();
lstShares.DataSource = dataSource;
lstShares.DisplayMember = "StockId";
lstShares.ValueMember = "Id";
lstShares.Refresh();
}
private void RefreshConnectedList()
{
var dataSource = _personStockFacade.GetAllSharesConnectedTo(ConnectPerson.Id);
lstPersConnected.DataSource = dataSource;
lstPersConnected.DisplayMember = "StockId";
lstPersConnected.ValueMember = "Id";
lstPersConnected.Refresh();
}
private void btnConnect_Click(object sender, EventArgs e)
{
if (lstShares.SelectedIndex != -1)
{
PersonStock ps = new PersonStock();
ps.PersonId = ConnectPerson.Id;
ps.StockId = int.Parse(lstShares.SelectedValue.ToString());
_stockPersonConnect.SavePersonStockConnection(ps);
RefreshShareList();
RefreshConnectedList();
}
}
private void btnDisconnect_Click(object sender, EventArgs e)
{
if (lstPersConnected.SelectedIndex != -1)
{
PersonStock ps = new PersonStock();
ps.PersonId = ConnectPerson.Id;
ps.StockId = int.Parse(lstPersConnected.SelectedValue.ToString());
_stockPersonConnect.RemoveConnectedShare(ps);
RefreshShareList();
RefreshConnectedList();
}
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
} }
} }
} }

View File

@ -58,22 +58,22 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Drawing.Common" name="System.Drawing.Common, Version=5.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" /> <assembly alias="System.Drawing.Common" name="System.Drawing.Common, Version=5.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
<data name="btnToPerson.Image" type="System.Drawing.Bitmap, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnDisconnect.Image" type="System.Drawing.Bitmap, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACiSURBVDhPY0AH37594wPie0D8H4ihoiQAoKYlq1evBmkm wAAADsABataJCQAAAKJJREFUOE9jQAffvn3jA+J7QPwfiKGiJACgpiWrV68GaSbdAKCGqBs3bvz38PAg
3QCghqgbN2789/DwIN0AoGKFj0CQlJT038nJCWYAQQzTzAzERydOnAjWjI5BCnGxYQbUHzlyBC6BjvEa 3QCgYoWPQJCUlPTfyckJZgBBDNPMDMRHJ06cCNaMjkEKcbFhBtQfOXIELoGO8RoAJKyeP3/+Jzg4GC6B
ACSsnj9//ic4OBgugY4JGXCvoqICLogN09wAyrxAcSBCDaAsGkEAyCE/IcEAUAAjKRPCGAAoiJKZCGEM jgkZcK+iogIuiA3T3ADKvEBxIEINoCwaQQDIIT8hwQBQACMpE8IYACiIkpkIYQwAFCQhOzMwAABkGA25
ABQkITszMAAAZBgNueqz2kUAAAAASUVORK5CYII= 6rPaRQAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<data name="button1.Image" type="System.Drawing.Bitmap, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnConnect.Image" type="System.Drawing.Bitmap, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACmSURBVDhPYyAGfPv27T8Q3wNiPqgQaQBkwNq1a0GGLIEK wAAADsABataJCQAAAKZJREFUOE9jIAZ8+/btPxDfA2I+qBBpAGTA2rVrQYYsgQqRBkAGeHh4/L958ybI
kQZABnh4ePy/efMmyJAoqDAEgCSJwU5OTv9TUlL+fwQCIF8Bqh1iAEgShHGxkfHkyZNBckeBmJksA0D4 kCioMASAJInBTk5O/1NSUv5/BAIgXwGqHWIASBKEcbGR8eTJk0FyR4GYmSwDQPjo0aMg+XqyDQgJCfn/
6NGjIPl6sg0ICQn5/+LFiz9ANVZkGQDClZWVIDX3BsYAir1AUSBijUZiMEgz1oT0//9/kCGEMO6kDAJo 4sWLP0A1VmQZAMKVlZUgNfcGxgCKvUBRIGKNRmIwSDPWhPT//3+QIYQw7qQMAmiKsWHKMxMQY8nODAwA
irFhyjMTEGPJzgwMAF29/539maLfAAAAAElFTkSuQmCC Xb3/nf2Zot8AAAAASUVORK5CYII=
</value> </value>
</data> </data>
</root> </root>