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.Collections.Generic;
using DataDomain;
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>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DataDomain\DataDomain.csproj" />
</ItemGroup>
</Project>

View File

@ -1,10 +1,47 @@
using StockBL.Interface;
using DataDomain;
using StockBL.Interface;
using StockDAL.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
namespace StockBL
{
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>
<ItemGroup>
<ProjectReference Include="..\DataDomain\DataDomain.csproj" />
<ProjectReference Include="..\DatamodelLibrary\DatamodelLibrary.csproj" />
<ProjectReference Include="..\StockBL.Interface\StockBL.Interface.csproj" />
<ProjectReference Include="..\StockDal.Interface\StockDAL.Interface.csproj" />
</ItemGroup>
</Project>

View File

@ -20,6 +20,15 @@ namespace StockDAL
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)
{
using var context = new StockContext();
@ -46,5 +55,18 @@ namespace StockDAL
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
{
IEnumerable<PersonStock> GetAllConnectedStocks();
IEnumerable<PersonStock> GetAllConnectionsByPersId(int personId);
void RemoveConnectedShare(PersonStock personStock);
PersonStock SavePersonStockConnection(PersonStock personStock);
}
}

View File

@ -1,4 +1,6 @@
using Autofac;
using StockBL;
using StockBL.Interface;
using StockDal;
using StockDal.Interface;
using StockDAL;
@ -24,7 +26,14 @@ namespace StockInfo
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
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()
@ -35,6 +44,7 @@ namespace StockInfo
builder.RegisterType<PersonRepository>().As<IPersonRepository>();
builder.RegisterType<AddressRepository>().As<IAddressRepository>();
builder.RegisterType<StockPersonConnect>().As<IStockPersonConnect>();
builder.RegisterType<PersonStockFacade>().As<IPersonStockFacade>();
builder.RegisterType<frmInitial>();
return builder.Build();
}

View File

@ -26,6 +26,8 @@
<ItemGroup>
<ProjectReference Include="..\DataDomain\DataDomain.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\StockDAL.csproj" />
</ItemGroup>

View File

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

View File

@ -31,11 +31,12 @@ namespace StockInfo
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmPersonShareConnect));
this.lstShares = new System.Windows.Forms.ListBox();
this.listBox1 = new System.Windows.Forms.ListBox();
this.btnToPerson = new System.Windows.Forms.Button();
this.lstPersConnected = new System.Windows.Forms.ListBox();
this.btnDisconnect = new System.Windows.Forms.Button();
this.lblShareHolder = 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();
//
// lstShares
@ -47,23 +48,24 @@ namespace StockInfo
this.lstShares.Size = new System.Drawing.Size(173, 349);
this.lstShares.TabIndex = 0;
//
// listBox1
// lstPersConnected
//
this.listBox1.FormattingEnabled = true;
this.listBox1.ItemHeight = 15;
this.listBox1.Location = new System.Drawing.Point(270, 35);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(173, 349);
this.listBox1.TabIndex = 1;
this.lstPersConnected.FormattingEnabled = true;
this.lstPersConnected.ItemHeight = 15;
this.lstPersConnected.Location = new System.Drawing.Point(270, 35);
this.lstPersConnected.Name = "lstPersConnected";
this.lstPersConnected.Size = new System.Drawing.Size(173, 349);
this.lstPersConnected.TabIndex = 1;
//
// btnToPerson
// btnDisconnect
//
this.btnToPerson.Image = ((System.Drawing.Image)(resources.GetObject("btnToPerson.Image")));
this.btnToPerson.Location = new System.Drawing.Point(214, 202);
this.btnToPerson.Name = "btnToPerson";
this.btnToPerson.Size = new System.Drawing.Size(49, 23);
this.btnToPerson.TabIndex = 2;
this.btnToPerson.UseVisualStyleBackColor = true;
this.btnDisconnect.Image = ((System.Drawing.Image)(resources.GetObject("btnDisconnect.Image")));
this.btnDisconnect.Location = new System.Drawing.Point(214, 202);
this.btnDisconnect.Name = "btnDisconnect";
this.btnDisconnect.Size = new System.Drawing.Size(49, 23);
this.btnDisconnect.TabIndex = 2;
this.btnDisconnect.UseVisualStyleBackColor = true;
this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click);
//
// lblShareHolder
//
@ -83,25 +85,37 @@ namespace StockInfo
this.label1.TabIndex = 4;
this.label1.Text = "Uncoupled Shares";
//
// button1
// btnConnect
//
this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image")));
this.button1.Location = new System.Drawing.Point(215, 173);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(49, 23);
this.button1.TabIndex = 5;
this.button1.UseVisualStyleBackColor = true;
this.btnConnect.Image = ((System.Drawing.Image)(resources.GetObject("btnConnect.Image")));
this.btnConnect.Location = new System.Drawing.Point(215, 173);
this.btnConnect.Name = "btnConnect";
this.btnConnect.Size = new System.Drawing.Size(49, 23);
this.btnConnect.TabIndex = 5;
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
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
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.lblShareHolder);
this.Controls.Add(this.btnToPerson);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.btnDisconnect);
this.Controls.Add(this.lstPersConnected);
this.Controls.Add(this.lstShares);
this.Name = "frmPersonShareConnect";
this.Text = "frmPersonShareConnect";
@ -114,10 +128,11 @@ namespace StockInfo
#endregion
private System.Windows.Forms.ListBox lstShares;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Button btnToPerson;
private System.Windows.Forms.ListBox lstPersConnected;
private System.Windows.Forms.Button btnDisconnect;
private System.Windows.Forms.Label lblShareHolder;
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 StockBL.Interface;
using StockDAL.Interface;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@ -13,16 +15,75 @@ namespace StockInfo
{
public partial class frmPersonShareConnect : Form
{
private readonly IPersonStockFacade _personStockFacade;
private readonly IStockPersonConnect _stockPersonConnect;
private readonly IStockRepository _stockRepository;
public Person ConnectPerson { get; set; }
public frmPersonShareConnect()
public frmPersonShareConnect(IPersonStockFacade personStockFacade, IStockPersonConnect stockPersonConnect,IStockRepository stockRepository)
{
InitializeComponent();
_personStockFacade = personStockFacade;
_stockPersonConnect = stockPersonConnect;
_stockRepository = stockRepository;
}
private void frmPersonShareConnect_Shown(object sender, EventArgs e)
{
this.Text = $"{ConnectPerson.Id} - {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>
</resheader>
<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>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACiSURBVDhPY0AH37594wPie0D8H4ihoiQAoKYlq1evBmkm
3QCghqgbN2789/DwIN0AoGKFj0CQlJT038nJCWYAQQzTzAzERydOnAjWjI5BCnGxYQbUHzlyBC6BjvEa
ACSsnj9//ic4OBgugY4JGXCvoqICLogN09wAyrxAcSBCDaAsGkEAyCE/IcEAUAAjKRPCGAAoiJKZCGEM
ABQkITszMAAAZBgNueqz2kUAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAAKJJREFUOE9jQAffvn3jA+J7QPwfiKGiJACgpiWrV68GaSbdAKCGqBs3bvz38PAg
3QCgYoWPQJCUlPTfyckJZgBBDNPMDMRHJ06cCNaMjkEKcbFhBtQfOXIELoGO8RoAJKyeP3/+Jzg4GC6B
jgkZcK+iogIuiA3T3ADKvEBxIEINoCwaQQDIIT8hwQBQACMpE8IYACiIkpkIYQwAFCQhOzMwAABkGA25
6rPaRQAAAABJRU5ErkJggg==
</value>
</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>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACmSURBVDhPYyAGfPv27T8Q3wNiPqgQaQBkwNq1a0GGLIEK
kQZABnh4ePy/efMmyJAoqDAEgCSJwU5OTv9TUlL+fwQCIF8Bqh1iAEgShHGxkfHkyZNBckeBmJksA0D4
6NGjIPl6sg0ICQn5/+LFiz9ANVZkGQDClZWVIDX3BsYAir1AUSBijUZiMEgz1oT0//9/kCGEMO6kDAJo
irFhyjMTEGPJzgwMAF29/539maLfAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAAKZJREFUOE9jIAZ8+/btPxDfA2I+qBBpAGTA2rVrQYYsgQqRBkAGeHh4/L958ybI
kCioMASAJInBTk5O/1NSUv5/BAIgXwGqHWIASBKEcbGR8eTJk0FyR4GYmSwDQPjo0aMg+XqyDQgJCfn/
4sWLP0A1VmQZAMKVlZUgNfcGxgCKvUBRIGKNRmIwSDPWhPT//3+QIYQw7qQMAmiKsWHKMxMQY8nODAwA
Xb3/nf2Zot8AAAAASUVORK5CYII=
</value>
</data>
</root>