diff --git a/Redistribute/README.md b/Redistribute/README.md deleted file mode 100644 index cc04948..0000000 --- a/Redistribute/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# CS2_Project -practic project for cs2 group diff --git a/Redistribute/SqlLocalDBx32.msi b/Redistribute/SqlLocalDBx32.msi deleted file mode 100644 index 1930374..0000000 Binary files a/Redistribute/SqlLocalDBx32.msi and /dev/null differ diff --git a/Redistribute/SqlLocalDBx64.msi b/Redistribute/SqlLocalDBx64.msi deleted file mode 100644 index bdcb80a..0000000 Binary files a/Redistribute/SqlLocalDBx64.msi and /dev/null differ diff --git a/Solution/ContosoProject/ContosoUI/App.config b/Solution/ContosoProject/ContosoUI/App.config index 9693546..6e1f0d3 100644 --- a/Solution/ContosoProject/ContosoUI/App.config +++ b/Solution/ContosoProject/ContosoUI/App.config @@ -3,17 +3,31 @@
+ - - + + - + + + + + + + + + + + + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.Designer.cs b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.Designer.cs index 97f8f80..2c24291 100644 --- a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.Designer.cs +++ b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.Designer.cs @@ -62,9 +62,9 @@ private void InitializeComponent() this.OkButton.AutoWidthInLayoutControl = true; this.OkButton.Image = ((System.Drawing.Image)(resources.GetObject("OkButton.Image"))); this.OkButton.ImageLocation = DevExpress.XtraEditors.ImageLocation.MiddleCenter; - this.OkButton.Location = new System.Drawing.Point(458, 305); + this.OkButton.Location = new System.Drawing.Point(588, 505); this.OkButton.Name = "OkButton"; - this.OkButton.Size = new System.Drawing.Size(64, 44); + this.OkButton.Size = new System.Drawing.Size(84, 44); this.OkButton.StyleController = this.layoutControl1; this.OkButton.TabIndex = 4; this.OkButton.Click += new System.EventHandler(this.OkButton_Click); @@ -80,7 +80,7 @@ private void InitializeComponent() this.layoutControl1.Name = "layoutControl1"; this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(733, 33, 250, 350); this.layoutControl1.Root = this.layoutControlGroup1; - this.layoutControl1.Size = new System.Drawing.Size(534, 361); + this.layoutControl1.Size = new System.Drawing.Size(684, 561); this.layoutControl1.TabIndex = 0; this.layoutControl1.Text = "layoutControl1"; // @@ -89,7 +89,7 @@ private void InitializeComponent() this.LoginPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("LoginPictureBox.Image"))); this.LoginPictureBox.Location = new System.Drawing.Point(12, 12); this.LoginPictureBox.Name = "LoginPictureBox"; - this.LoginPictureBox.Size = new System.Drawing.Size(510, 289); + this.LoginPictureBox.Size = new System.Drawing.Size(660, 489); this.LoginPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.LoginPictureBox.TabIndex = 8; this.LoginPictureBox.TabStop = false; @@ -97,9 +97,9 @@ private void InitializeComponent() // LoginTextEdit // this.LoginTextEdit.EditValue = ""; - this.LoginTextEdit.Location = new System.Drawing.Point(56, 305); + this.LoginTextEdit.Location = new System.Drawing.Point(56, 505); this.LoginTextEdit.Name = "LoginTextEdit"; - this.LoginTextEdit.Size = new System.Drawing.Size(398, 20); + this.LoginTextEdit.Size = new System.Drawing.Size(528, 20); this.LoginTextEdit.StyleController = this.layoutControl1; this.LoginTextEdit.TabIndex = 4; this.LoginTextEdit.KeyDown += new System.Windows.Forms.KeyEventHandler(this.LoginTextEdit_KeyDown); @@ -107,12 +107,12 @@ private void InitializeComponent() // PasswordEdit // this.PasswordEdit.EditValue = ""; - this.PasswordEdit.Location = new System.Drawing.Point(56, 329); + this.PasswordEdit.Location = new System.Drawing.Point(56, 529); this.PasswordEdit.Name = "PasswordEdit"; this.PasswordEdit.Properties.Appearance.Font = new System.Drawing.Font("Tahoma", 8F); this.PasswordEdit.Properties.Appearance.Options.UseFont = true; this.PasswordEdit.Properties.UseSystemPasswordChar = true; - this.PasswordEdit.Size = new System.Drawing.Size(398, 20); + this.PasswordEdit.Size = new System.Drawing.Size(528, 20); this.PasswordEdit.StyleController = this.layoutControl1; this.PasswordEdit.TabIndex = 6; this.PasswordEdit.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PasswordEdit_KeyDown); @@ -127,7 +127,7 @@ private void InitializeComponent() this.layoutControlGroup4}); this.layoutControlGroup1.Location = new System.Drawing.Point(0, 0); this.layoutControlGroup1.Name = "Root"; - this.layoutControlGroup1.Size = new System.Drawing.Size(534, 361); + this.layoutControlGroup1.Size = new System.Drawing.Size(684, 561); this.layoutControlGroup1.TextVisible = false; // // layoutControlItem1 @@ -137,7 +137,7 @@ private void InitializeComponent() this.layoutControlItem1.Location = new System.Drawing.Point(0, 0); this.layoutControlItem1.MinSize = new System.Drawing.Size(104, 24); this.layoutControlItem1.Name = "layoutControlItem1"; - this.layoutControlItem1.Size = new System.Drawing.Size(514, 293); + this.layoutControlItem1.Size = new System.Drawing.Size(664, 493); this.layoutControlItem1.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom; this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0); this.layoutControlItem1.TextVisible = false; @@ -149,9 +149,9 @@ private void InitializeComponent() this.layoutControlGroup3.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { this.LoginLayoutControlItem, this.PasswordLayoutControlItem}); - this.layoutControlGroup3.Location = new System.Drawing.Point(0, 293); + this.layoutControlGroup3.Location = new System.Drawing.Point(0, 493); this.layoutControlGroup3.Name = "layoutControlGroup3"; - this.layoutControlGroup3.Size = new System.Drawing.Size(446, 48); + this.layoutControlGroup3.Size = new System.Drawing.Size(576, 48); this.layoutControlGroup3.Text = "layoutControlGroup2"; // // LoginLayoutControlItem @@ -161,7 +161,7 @@ private void InitializeComponent() this.LoginLayoutControlItem.MaxSize = new System.Drawing.Size(0, 24); this.LoginLayoutControlItem.MinSize = new System.Drawing.Size(98, 24); this.LoginLayoutControlItem.Name = "LoginLayoutControlItem"; - this.LoginLayoutControlItem.Size = new System.Drawing.Size(446, 24); + this.LoginLayoutControlItem.Size = new System.Drawing.Size(576, 24); this.LoginLayoutControlItem.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom; this.LoginLayoutControlItem.Text = "Логин:"; this.LoginLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Left; @@ -172,7 +172,7 @@ private void InitializeComponent() this.PasswordLayoutControlItem.Control = this.PasswordEdit; this.PasswordLayoutControlItem.Location = new System.Drawing.Point(0, 24); this.PasswordLayoutControlItem.Name = "layoutControlItem3"; - this.PasswordLayoutControlItem.Size = new System.Drawing.Size(446, 24); + this.PasswordLayoutControlItem.Size = new System.Drawing.Size(576, 24); this.PasswordLayoutControlItem.Text = "Пароль:"; this.PasswordLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Left; this.PasswordLayoutControlItem.TextSize = new System.Drawing.Size(41, 13); @@ -183,9 +183,9 @@ private void InitializeComponent() this.layoutControlGroup4.GroupBordersVisible = false; this.layoutControlGroup4.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { this.simpleButtonLCI}); - this.layoutControlGroup4.Location = new System.Drawing.Point(446, 293); + this.layoutControlGroup4.Location = new System.Drawing.Point(576, 493); this.layoutControlGroup4.Name = "layoutControlGroup4"; - this.layoutControlGroup4.Size = new System.Drawing.Size(68, 48); + this.layoutControlGroup4.Size = new System.Drawing.Size(88, 48); this.layoutControlGroup4.Text = "layoutControlGroup3"; // // simpleButtonLCI @@ -196,7 +196,7 @@ private void InitializeComponent() this.simpleButtonLCI.Location = new System.Drawing.Point(0, 0); this.simpleButtonLCI.MinSize = new System.Drawing.Size(46, 42); this.simpleButtonLCI.Name = "simpleButtonLCI"; - this.simpleButtonLCI.Size = new System.Drawing.Size(68, 48); + this.simpleButtonLCI.Size = new System.Drawing.Size(88, 48); this.simpleButtonLCI.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom; this.simpleButtonLCI.TextLocation = DevExpress.Utils.Locations.Left; this.simpleButtonLCI.TextSize = new System.Drawing.Size(0, 0); @@ -219,7 +219,7 @@ private void InitializeComponent() // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(534, 361); + this.ClientSize = new System.Drawing.Size(684, 561); this.Controls.Add(this.layoutControl1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; diff --git a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.cs b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.cs index f47188b..35479e0 100644 --- a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.cs +++ b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.cs @@ -15,8 +15,8 @@ namespace ContosoUI.Authentication public partial class AuthenticationForm : DevExpress.XtraEditors.XtraForm { public event EventHandler OkButtonClick = null; - public AuthenticationPresenter presenter = null; - + AuthenticationPresenter presenter = null; + public AuthenticationPresenter Presenter { get { return this.presenter; } } public string Login { get { return LoginTextEdit.Text; } } public string Password { get { return PasswordEdit.Text; } } @@ -64,5 +64,15 @@ public void FieldsReset() PasswordReset(); LoginTextEdit.Text = String.Empty; } + + internal void UserIsNotActiveDialog() + { + MessageBox.Show("Извините, данный аккаунт не активен.", "Ошибка!"); + } + + internal void AccessDenyDialog() + { + MessageBox.Show("Неверный логин и/или пароль", "Ошибка!"); + } } } \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.resx b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.resx index 2f281fc..50f6483 100644 --- a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.resx +++ b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.resx @@ -181,505 +181,1595 @@ - /9j/4AAQSkZJRgABAQEASABIAAD/7gAOQWRvYmUAZAAAAAAB/+ELIEV4aWYAAE1NACoAAAAIAAcBEgAD - AAAAAQABAAABGgAFAAAAAQAAAGIBGwAFAAAAAQAAAGoBKAADAAAAAQACAAABMQACAAAAHgAAAHIBMgAC - AAAAFAAAAJCHaQAEAAAAAQAAAKQAAADEAEgAAAABAAAASAAAAAEAAEFkb2JlIFBob3Rvc2hvcCBDUzYg - KFdpbmRvd3MpADIwMTU6MTA6MjAgMTc6MDg6MTIAAAKgAgAEAAAAAQAAArygAwAEAAAAAQAAAZMAAAAA - AAAABgEDAAMAAAABAAYAAAEaAAUAAAABAAABEgEbAAUAAAABAAABGgEoAAMAAAABAAIAAAIBAAQAAAAB - AAABIgICAAQAAAABAAAJ9QAAAAAAAABIAAAAAQAAAEgAAAAB/9j/7QAMQWRvYmVfQ00AAf/uAA5BZG9i - ZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwM - DAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwM - DAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAFwAoAMBIgACEQEDEQH/3QAEAAr/xAE/AAABBQEBAQEB - AQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUH - BggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNU - ZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3 - EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPEl - BhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdH - V2d3h5ent8f/2gAMAwEAAhEDEQA/APVUkkklKSSSSUpMkkkpSSSSSlJJJJKUkkuI+u31gy3Xu6PgXuxW - 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 - AAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3Bh - Y2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2Ug - LSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENv - bmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRp - b24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8u - ABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAt - ADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADB - AMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1 - AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJx - AnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6 - A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVY - BWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdP - B2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmk - CboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxc - DHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96 - D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMD - EyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6 - Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtj - G4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBB - IGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWX - Jccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitp - K50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6 - MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiM - OMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/i - QCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fA - SAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAn - UHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1ka - WWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKc - YvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yv - bQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdW - d7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKS - gvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45m - js6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrV - m0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfg - qFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WK - tgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPU - xFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB - 00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT - 4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM - 8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf///9sAQwAGBAQEBQQG - BQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwMDAwMDBAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/9sA - QwEHBwcNDA0YEBAYFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwM - DAwMDAwM/8AAEQgBkwK8AwERAAIRAQMRAf/EAB8AAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKC//E - ALUQAAIBAwMCBAIGBwMEAgYCcwECAxEEAAUhEjFBUQYTYSJxgRQykaEHFbFCI8FS0eEzFmLwJHKC8SVD - NFOSorJjc8I1RCeTo7M2F1RkdMPS4ggmgwkKGBmElEVGpLRW01UoGvLj88TU5PRldYWVpbXF1eX1ZnaG - lqa2xtbm9jdHV2d3h5ent8fX5/c4SFhoeIiYqLjI2Oj4KTlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq - +v/EAB8BAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKC//EALURAAICAQIDBQUEBQYECAMDbQEAAhED - BCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZF - GidkdFU38qOzwygp0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhY - aHiImKi4yNjo+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/dAAQAWP/aAAwDAQACEQMRAD8A9U4q - 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq - 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq - 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//0PVOKuxV2KuxV2KuxV2K + /9j/4AAQSkZJRgABAQEASABIAAD/7gAOQWRvYmUAZAAAAAAB/+EP/kV4aWYAAE1NACoAAAAIAAwBAAAD + AAAAAQM0AAABAQADAAAAAQIiAAABAgADAAAAAwAAAJ4BBgADAAAAAQACAAABEgADAAAAAQABAAABFQAD + AAAAAQADAAABGgAFAAAAAQAAAKQBGwAFAAAAAQAAAKwBKAADAAAAAQACAAABMQACAAAAIgAAALQBMgAC + AAAAFAAAANaHaQAEAAAAAQAAAOoAAAEiAAgACAAIAEgAAAABAAAASAAAAAEAAEFkb2JlIFBob3Rvc2hv + cCBDQyAyMDE1IChXaW5kb3dzKQAyMDE1OjExOjExIDE1OjUzOjM4AAAEkAAABwAAAAQwMjIxoAEAAwAA + AAH//wAAoAIABAAAAAEAAAM0oAMABAAAAAEAAAIiAAAAAAAAAAYBAwADAAAAAQAGAAABGgAFAAAAAQAA + AXABGwAFAAAAAQAAAXgBKAADAAAAAQACAAACAQAEAAAAAQAAAYACAgAEAAAAAQAADnUAAAAAAAAASAAA + AAEAAABIAAAAAf/Y/+0ADEFkb2JlX0NNAAL/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsK + CxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAO + DhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAAR + CABrAKADASIAAhEBAxEB/90ABAAK/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEB + AQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYU + kaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSV + xNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIE + QVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD + 03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwD0hJMk + kpdJMkkpdJVep59XTem5XUbgXV4lTrnMby7aNGN/ru9q5zO+t3Ven9Aq69k4uPZjZeIy2htZe1zcm17R + Vi3b3Wb6W4733etX6fqfZ7K/0P6NJT1qS5fL+tPUmHreHiY9N3Uei2UhrSLAy+u8e1tdbHvtryWO/wCE + srs/t+wdf1u6ll9Ev67g0Yz8Kin1bGvNm5j20vfdjueHNba/7b6ddfps/o36WxJT1iS5fF+tfULrujYl + lFNeR10C7HsG91bKBj15NpsZ6jbH3/anXY7PfWz06/VVBn+MiuzD6dfZXVg/b6by6+8WWUNyKHek3G/V + 9tzKrPbdbf8Apvs9Nlf6P/CJKe3SXIZv15yMZnUrRi1EdFqwn5le4uNj8t1Yurxb2O9NleP6v6O17L/W + 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 + LQpqKSmu/Htc9zm5NjGuIIYGsIb/AFC9jnqvY5tJdVkZtgeQCH+k0ASfzTVU5rvo+9j1oKTOPz/7KSnJ + 9So+37fcHAkgek0OOwPDmx6O139X89RbfjtIJz7Hag7XUiDrv2nbTu/k/TWweP8ACdvgn8f5xFTj+rQD + rnWgGHCau0h30vR/dbse1GxH12OeG5LskgCWvZs2/wApvsr+luWgP+uKL+30v7SSn//ZAP/bAEMAAgIC + AgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwMDAwMDAwMDAwM + DP/bAEMBAwMDBQQFCQYGCQ0KCQoNDw4ODg4PDwwMDAwMDw8MDAwMDAwPDAwMDAwMDAwMDAwMDAwMDAwM + DAwMDAwMDAwMDP/AABEIAiIDNAMBEQACEQEDEQH/xAAfAAAABwEBAQEBAAAAAAAAAAAEBQMCBgEABwgJ + Cgv/xAC1EAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRy + gvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl + 9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqq + usra6vr/xAAfAQACAgMBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgv/xAC1EQACAgECAwUFBAUGBAgDA20B + AAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz0jXiRIMXVJMICQoY + GSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2xtbm9kdXZ3eHl6e3x9fn + 9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/3QAEAGf/2gAMAwEAAhEDEQA/ + APtgepxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K 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 - /wAE6qTSsQHjyJ/ADDa0jrP8vrWhN25lJH2EAVQfpqcFrSofyx0xpOSkoOtBEhP342mmQaR5S0/T6NFE - XkH7b0/UNsbWmQRwkAVwJV1XFVwGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVxxVrFW8VdirsVdirsV - dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//Q9U4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F - XYq7FXYq7FXYq6mKupirqYq6mKupirqYq6mKupirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVcQD - iqwxKcVW/Vo8VcLaIdsVXegnhirYjUdMVb4jFW6DFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 - FXUxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv8A/9H1TirsVdirsVdirsVd + uxV2KuxV2KuxV2KuxV2Kt9vpxV//0PtgepxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux + V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux + V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux + V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kt9vpxV//0ftgaVO4xV23iMVdt4jFXbeI + xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI + xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI + xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI + xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI + xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI + xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI + xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFW9qdR1xV/9L7WHqcVdirsVdirsVdirsVdirs + VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs + VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs + VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirfb6cVf + /9P7WHqcVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd - irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//Z + irsVdirsVdirsVdirsVdirfb6cVf/9T7WHqcVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir + sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir + sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir + sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirfb6cVf/9X7UkmpxV1TirqnFXVOKuqc + VdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1T + irqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuq + 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 diff --git a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationPresenter.cs b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationPresenter.cs index feaf798..e8fbcb3 100644 --- a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationPresenter.cs +++ b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationPresenter.cs @@ -11,11 +11,12 @@ namespace ContosoUI.Authentication { - public class AuthenticationPresenter : BaseMD5 + public class AuthenticationPresenter { IUserRepository model = null; AuthenticationForm view = null; - public User user = null; + User user = null; + public User User { get { return this.user; } } public AuthenticationPresenter(AuthenticationForm view) { @@ -27,7 +28,7 @@ public AuthenticationPresenter(AuthenticationForm view) void OkButtonClickHendler(object sender, System.EventArgs e) { - if (model.TryFindByLoginPassword(out this.user, view.Login, view.Password == "admin"?"admin":GetMd5Hash(view.Password))) + if (model.TryFindByLoginPassword(out this.user, view.Login, view.Password.ToMD5())) { if (user.IsActive) { @@ -36,14 +37,14 @@ void OkButtonClickHendler(object sender, System.EventArgs e) } else { - MessageBox.Show("Извините, данный аккаунт не активен.", "Ошибка!"); + view.UserIsNotActiveDialog(); view.FieldsReset(); } } else { - MessageBox.Show("Неверный логин и/или пароль", "Ошибка!"); + view.AccessDenyDialog(); view.PasswordReset(); } } diff --git a/Solution/ContosoProject/ContosoUI/Authentication/BaseMD5.cs b/Solution/ContosoProject/ContosoUI/Authentication/MD5Extension.cs similarity index 68% rename from Solution/ContosoProject/ContosoUI/Authentication/BaseMD5.cs rename to Solution/ContosoProject/ContosoUI/Authentication/MD5Extension.cs index 5889667..bdd85cd 100644 --- a/Solution/ContosoProject/ContosoUI/Authentication/BaseMD5.cs +++ b/Solution/ContosoProject/ContosoUI/Authentication/MD5Extension.cs @@ -7,12 +7,12 @@ namespace ContosoUI.Authentication { - public class BaseMD5 + public static class MD5Extension { - protected string GetMd5Hash(string input) + public static string ToMD5(this string input) { - MD5 md5Hash = MD5.Create(); - byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); + MD5 md = MD5.Create(); + byte[] data = md.ComputeHash(Encoding.UTF8.GetBytes(input)); StringBuilder sBuilder = new StringBuilder(); foreach (var d in data) { diff --git a/Solution/ContosoProject/ContosoUI/ContosoUI.csproj b/Solution/ContosoProject/ContosoUI/ContosoUI.csproj index 652b143..985c20b 100644 --- a/Solution/ContosoProject/ContosoUI/ContosoUI.csproj +++ b/Solution/ContosoProject/ContosoUI/ContosoUI.csproj @@ -33,24 +33,60 @@ - - - - - - - - - - - - - - - - - - + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + False ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll @@ -58,11 +94,19 @@ ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + ..\packages\EntityFramework.SqlServerCompact.6.1.3\lib\net45\EntityFramework.SqlServerCompact.dll + True + + + ..\packages\Microsoft.SqlServer.Compact.4.0.8876.1\lib\net40\System.Data.SqlServerCe.dll + True + @@ -84,7 +128,9 @@ AuthenticationForm.cs - + + + Form @@ -100,35 +146,42 @@ CustomersListViev.cs - + Form - - AddGoods.cs + + AddGoodsView.cs - + Form - - GoodsForm.cs + + GoodsFormView.cs - - - + + + + Form - - AddOrderXtraForm.cs + + AddEditOrderView.cs - Form - + SearchView.cs + + + Form + + + ProductCategoryView.cs + Form @@ -178,18 +231,21 @@ CustomersListViev.cs - - AddGoods.cs + + AddGoodsView.cs - - GoodsForm.cs + + GoodsFormView.cs - - AddOrderXtraForm.cs + + AddEditOrderView.cs SearchView.cs + + ProductCategoryView.cs + UserEditForm.cs @@ -217,11 +273,15 @@ + + + + CustomerListView.cs @@ -229,6 +289,7 @@ OrderListView.cs + @@ -242,7 +303,9 @@ - + + Designer + @@ -256,6 +319,13 @@ + + + if not exist "$(TargetDir)x86" md "$(TargetDir)x86" + xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\x86\*.*" "$(TargetDir)x86" + if not exist "$(TargetDir)amd64" md "$(TargetDir)amd64" + xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\amd64\*.*" "$(TargetDir)amd64" + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsPresenter.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsPresenter.cs index 347f50f..a2ccd20 100644 --- a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsPresenter.cs +++ b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsPresenter.cs @@ -1,89 +1,166 @@ using Data.DumbData; +using Data.EFData; using Domain.DAO; using Domain.Entities; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ContosoUI.GoodsAll.AddGoods { - public class AddGoodsPresenter + public class AddGoodsPresenter : INotifyPropertyChanged { AddGoods view; - IGoodsRepository model = new GoodsDao(); + public GoodsCategoryService service = new GoodsCategoryService(); + Goods thisGoods; - public List productCategoryList = new List(); - public List Comments { get { return thisGoods.Coments; } set { } } + public List Categories { get; private set; } + public List Comments { get { return thisGoods.Coments.ToList(); } set { } } public AddGoodsPresenter(AddGoods view, int id) { - foreach (ProductCategory pc in Storage.categoryCollection) - { - productCategoryList.Add(pc.CategoryName); - } + Categories = new List(); + Categories.AddRange(service.CategoryDao.GetAll()); + this.view = view; if (id < 1) { - thisGoods = new Goods(); + thisGoods = new Goods() { Category = Categories[0]}; } else { - thisGoods = model.GetById(id); + thisGoods = service.GoodsDao.GetById(id); } } public string Name { get { return thisGoods.Name; } - set { thisGoods.Name = value; } + + set + { + if (thisGoods.Name != value) + { + thisGoods.Name = value; + NotifyPropertyChanged("Name"); + } + } } public string SKU { get { return thisGoods.SKU; } - set { thisGoods.SKU = value; } + set + { + if (thisGoods.SKU != value) + { + thisGoods.SKU = value; + NotifyPropertyChanged("SKU"); + } + } } public double Price { get { return thisGoods.Price; } - set { thisGoods.Price = value; } + set + { + if (thisGoods.Price != value) + { + thisGoods.Price = value; + NotifyPropertyChanged("Price"); + } + } } public int Count { get { return thisGoods.Count; } - set { thisGoods.Count = value; } + set + { + if (thisGoods.Count != value) + { + thisGoods.Count = value; + NotifyPropertyChanged("Count"); + } + } } - public string Category + public ProductCategory Category { - get { return thisGoods.Category.CategoryName; } - set { thisGoods.Category.CategoryName = value; } + get { return thisGoods.Category; } + set + { + if (thisGoods.Category != value) + { + thisGoods.Category = value; + NotifyPropertyChanged("Category"); + } + } } - public string Coments + public bool IsActive { - get { return thisGoods.Coments.ToString(); } - //set { thisGoods.Coments = value; } + get { return thisGoods.IsActive; } + set + { + if (thisGoods.IsActive != value) + { + thisGoods.IsActive = value; + NotifyPropertyChanged("IsActive"); + } + } } - public bool IsActive + private string currentComment = string.Empty; + public string CurentComment { - get { return thisGoods.IsActive; } - set { thisGoods.IsActive = value; } + get { return currentComment; } + set + { + if (currentComment != value) + { + currentComment = value; + + } NotifyPropertyChanged("CurentComment"); + } } - public void Save(Goods goods) + public void Save() { - model.Add(goods); + //когда попадаю сюда, нективный товар становится активным + if (!string.IsNullOrWhiteSpace(currentComment)) + { + thisGoods.Coments.Add(new Comment() { Message = currentComment, Type = CommentType.Goods }); + currentComment = string.Empty; + } + if (thisGoods.Id > 0) + { + service.GoodsDao.Update(thisGoods); + } + else + { + service.GoodsDao.Add(thisGoods); + } + NotifyPropertyChanged("Save"); + } + + public event PropertyChangedEventHandler PropertyChanged; + private void NotifyPropertyChanged(String info) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(info)); + } } - public void Update(Goods goods) + public void SaveAndNew(Goods g) { - model.Update(goods); + this.Save(); + NotifyPropertyChanged("New goods"); } } } diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoods.Designer.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.Designer.cs similarity index 55% rename from Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoods.Designer.cs rename to Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.Designer.cs index bbd009a..ae49c31 100644 --- a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoods.Designer.cs +++ b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.Designer.cs @@ -28,50 +28,60 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddGoods)); this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl(); + this.groupControl4 = new DevExpress.XtraEditors.GroupControl(); + this.textBox1 = new System.Windows.Forms.TextBox(); this.groupControl2 = new DevExpress.XtraEditors.GroupControl(); + this.addGoodsCheckBoxIsActive = new DevExpress.XtraEditors.CheckEdit(); + this.ribbonControl1 = new DevExpress.XtraBars.Ribbon.RibbonControl(); + this.saveGoodsButton1 = new DevExpress.XtraBars.BarButtonItem(); + this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); + this.saveOrEditribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); this.AddGoodsTextBoxUser = new DevExpress.XtraEditors.TextEdit(); - this.AddGoodsTextBoxCount = new DevExpress.XtraEditors.TextEdit(); - this.AddGoodsTextBoxPrice = new DevExpress.XtraEditors.TextEdit(); + this.addGoodsTextBoxCount = new DevExpress.XtraEditors.TextEdit(); + this.addGoodsTextBoxPrice = new DevExpress.XtraEditors.TextEdit(); this.groupControl1 = new DevExpress.XtraEditors.GroupControl(); + this.addGoodsLookUpEditCategory = new DevExpress.XtraEditors.LookUpEdit(); + this.productCategoryBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); - this.AddGoodsComboBoxEditCategory = new DevExpress.XtraEditors.ComboBoxEdit(); - this.AddGoodsTextBoxSKU = new DevExpress.XtraEditors.TextEdit(); - this.AddGoodsTextBoxName = new DevExpress.XtraEditors.TextEdit(); + this.addGoodsTextBoxComent = new DevExpress.XtraEditors.TextEdit(); + this.addGoodsTextBoxSKU = new DevExpress.XtraEditors.TextEdit(); + this.addGoodsTextBoxName = new DevExpress.XtraEditors.TextEdit(); this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup(); this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem(); this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem(); - this.AddGoodsCheckBoxIsActive = new System.Windows.Forms.CheckBox(); - this.AddGoodsSaveButton = new System.Windows.Forms.Button(); - this.groupControl4 = new DevExpress.XtraEditors.GroupControl(); this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.AddGoodsTextBoxComent = new DevExpress.XtraEditors.TextEdit(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); + this.saveGoodsButton = new DevExpress.XtraBars.BarButtonItem(); ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit(); this.layoutControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl4)).BeginInit(); + this.groupControl4.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.groupControl2)).BeginInit(); this.groupControl2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsCheckBoxIsActive.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxUser.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxCount.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxPrice.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxCount.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxPrice.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit(); this.groupControl1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsComboBoxEditCategory.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxSKU.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxName.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsLookUpEditCategory.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.productCategoryBindingSource)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxComent.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxSKU.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxName.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.groupControl4)).BeginInit(); - this.groupControl4.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxComent.Properties)).BeginInit(); this.SuspendLayout(); // // layoutControl1 @@ -84,63 +94,208 @@ private void InitializeComponent() this.layoutControl1.Name = "layoutControl1"; this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(491, 311, 250, 350); this.layoutControl1.Root = this.layoutControlGroup1; - this.layoutControl1.Size = new System.Drawing.Size(725, 353); + this.layoutControl1.Size = new System.Drawing.Size(725, 380); this.layoutControl1.TabIndex = 11; this.layoutControl1.Text = "layoutControl1"; // + // groupControl4 + // + this.groupControl4.Controls.Add(this.textBox1); + this.groupControl4.Location = new System.Drawing.Point(12, 224); + this.groupControl4.Name = "groupControl4"; + this.groupControl4.Size = new System.Drawing.Size(701, 144); + this.groupControl4.TabIndex = 1; + this.groupControl4.Text = "История коментариев"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(5, 23); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(691, 117); + this.textBox1.TabIndex = 0; + // // groupControl2 // + this.groupControl2.Controls.Add(this.addGoodsCheckBoxIsActive); this.groupControl2.Controls.Add(this.label7); this.groupControl2.Controls.Add(this.label6); this.groupControl2.Controls.Add(this.label5); - this.groupControl2.Controls.Add(this.AddGoodsSaveButton); - this.groupControl2.Controls.Add(this.AddGoodsCheckBoxIsActive); this.groupControl2.Controls.Add(this.AddGoodsTextBoxUser); - this.groupControl2.Controls.Add(this.AddGoodsTextBoxCount); - this.groupControl2.Controls.Add(this.AddGoodsTextBoxPrice); + this.groupControl2.Controls.Add(this.addGoodsTextBoxCount); + this.groupControl2.Controls.Add(this.addGoodsTextBoxPrice); this.groupControl2.Location = new System.Drawing.Point(367, 12); this.groupControl2.Name = "groupControl2"; - this.groupControl2.Size = new System.Drawing.Size(346, 180); + this.groupControl2.Size = new System.Drawing.Size(346, 208); this.groupControl2.TabIndex = 5; this.groupControl2.Text = "Данные товара"; // + // addGoodsCheckBoxIsActive + // + this.addGoodsCheckBoxIsActive.EditValue = true; + this.addGoodsCheckBoxIsActive.Location = new System.Drawing.Point(6, 148); + this.addGoodsCheckBoxIsActive.MenuManager = this.ribbonControl1; + this.addGoodsCheckBoxIsActive.Name = "addGoodsCheckBoxIsActive"; + this.addGoodsCheckBoxIsActive.Properties.Caption = "Активный"; + this.addGoodsCheckBoxIsActive.Size = new System.Drawing.Size(75, 19); + this.addGoodsCheckBoxIsActive.TabIndex = 7; + this.addGoodsCheckBoxIsActive.CheckedChanged += new System.EventHandler(this.addGoodsCheckBoxIsActive_CheckedChanged); + // + // ribbonControl1 + // + this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.None; + this.ribbonControl1.ExpandCollapseItem.Id = 0; + this.ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { + this.ribbonControl1.ExpandCollapseItem, + this.saveGoodsButton1}); + this.ribbonControl1.Location = new System.Drawing.Point(0, -1); + this.ribbonControl1.MaxItemId = 3; + this.ribbonControl1.Name = "ribbonControl1"; + this.ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { + this.mainRibbonPage}); + this.ribbonControl1.Size = new System.Drawing.Size(713, 141); + // + // saveGoodsButton1 + // + this.saveGoodsButton1.Caption = "Сохранить"; + this.saveGoodsButton1.Glyph = ((System.Drawing.Image)(resources.GetObject("saveGoodsButton1.Glyph"))); + this.saveGoodsButton1.Id = 2; + this.saveGoodsButton1.Name = "saveGoodsButton1"; + this.saveGoodsButton1.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large; + this.saveGoodsButton1.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveGoodsButton1_ItemClick); + // + // mainRibbonPage + // + this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { + this.saveOrEditribbonPageGroup}); + this.mainRibbonPage.MergeOrder = 1; + this.mainRibbonPage.Name = "mainRibbonPage"; + this.mainRibbonPage.Text = "Меню"; + // + // saveOrEditribbonPageGroup + // + this.saveOrEditribbonPageGroup.ItemLinks.Add(this.saveGoodsButton1); + this.saveOrEditribbonPageGroup.MergeOrder = 5; + this.saveOrEditribbonPageGroup.Name = "saveOrEditribbonPageGroup"; + this.saveOrEditribbonPageGroup.Text = "Сохранение"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(8, 96); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(79, 13); + this.label7.TabIndex = 6; + this.label7.Text = "Пользователь"; + this.label7.Visible = false; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(8, 59); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(67, 13); + this.label6.TabIndex = 5; + this.label6.Text = "Количество"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(5, 20); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(33, 13); + this.label5.TabIndex = 4; + this.label5.Text = "Цена"; + // // AddGoodsTextBoxUser // this.AddGoodsTextBoxUser.Location = new System.Drawing.Point(6, 112); this.AddGoodsTextBoxUser.Name = "AddGoodsTextBoxUser"; this.AddGoodsTextBoxUser.Size = new System.Drawing.Size(335, 20); this.AddGoodsTextBoxUser.TabIndex = 2; + this.AddGoodsTextBoxUser.Visible = false; // - // AddGoodsTextBoxCount + // addGoodsTextBoxCount // - this.AddGoodsTextBoxCount.Location = new System.Drawing.Point(5, 74); - this.AddGoodsTextBoxCount.Name = "AddGoodsTextBoxCount"; - this.AddGoodsTextBoxCount.Size = new System.Drawing.Size(336, 20); - this.AddGoodsTextBoxCount.TabIndex = 1; + this.addGoodsTextBoxCount.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.addGoodsTextBoxCount.Location = new System.Drawing.Point(5, 74); + this.addGoodsTextBoxCount.Name = "addGoodsTextBoxCount"; + this.addGoodsTextBoxCount.Size = new System.Drawing.Size(336, 20); + this.addGoodsTextBoxCount.TabIndex = 1; // - // AddGoodsTextBoxPrice + // addGoodsTextBoxPrice // - this.AddGoodsTextBoxPrice.Location = new System.Drawing.Point(6, 36); - this.AddGoodsTextBoxPrice.Name = "AddGoodsTextBoxPrice"; - this.AddGoodsTextBoxPrice.Size = new System.Drawing.Size(335, 20); - this.AddGoodsTextBoxPrice.TabIndex = 0; + this.addGoodsTextBoxPrice.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.addGoodsTextBoxPrice.Location = new System.Drawing.Point(6, 36); + this.addGoodsTextBoxPrice.Name = "addGoodsTextBoxPrice"; + this.addGoodsTextBoxPrice.Size = new System.Drawing.Size(335, 20); + this.addGoodsTextBoxPrice.TabIndex = 0; // // groupControl1 // + this.groupControl1.Controls.Add(this.addGoodsLookUpEditCategory); this.groupControl1.Controls.Add(this.label4); this.groupControl1.Controls.Add(this.label3); this.groupControl1.Controls.Add(this.label2); this.groupControl1.Controls.Add(this.label1); - this.groupControl1.Controls.Add(this.AddGoodsComboBoxEditCategory); - this.groupControl1.Controls.Add(this.AddGoodsTextBoxComent); - this.groupControl1.Controls.Add(this.AddGoodsTextBoxSKU); - this.groupControl1.Controls.Add(this.AddGoodsTextBoxName); + this.groupControl1.Controls.Add(this.addGoodsTextBoxComent); + this.groupControl1.Controls.Add(this.addGoodsTextBoxSKU); + this.groupControl1.Controls.Add(this.addGoodsTextBoxName); this.groupControl1.Location = new System.Drawing.Point(12, 12); this.groupControl1.Name = "groupControl1"; - this.groupControl1.Size = new System.Drawing.Size(351, 180); + this.groupControl1.Size = new System.Drawing.Size(351, 208); this.groupControl1.TabIndex = 4; this.groupControl1.Text = "Описание товара"; // + // addGoodsLookUpEditCategory + // + this.addGoodsLookUpEditCategory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.addGoodsLookUpEditCategory.Location = new System.Drawing.Point(5, 112); + this.addGoodsLookUpEditCategory.MenuManager = this.ribbonControl1; + this.addGoodsLookUpEditCategory.Name = "addGoodsLookUpEditCategory"; + this.addGoodsLookUpEditCategory.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.addGoodsLookUpEditCategory.Properties.Columns.AddRange(new DevExpress.XtraEditors.Controls.LookUpColumnInfo[] { + new DevExpress.XtraEditors.Controls.LookUpColumnInfo("CategoryName", "Category Name", 98, DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Near)}); + this.addGoodsLookUpEditCategory.Properties.DataSource = this.productCategoryBindingSource; + this.addGoodsLookUpEditCategory.Properties.DisplayMember = "CategoryName"; + this.addGoodsLookUpEditCategory.Size = new System.Drawing.Size(341, 20); + this.addGoodsLookUpEditCategory.TabIndex = 7; + // + // productCategoryBindingSource + // + this.productCategoryBindingSource.DataSource = typeof(Domain.Entities.ProductCategory); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(6, 133); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(68, 13); + this.label4.TabIndex = 7; + this.label4.Text = "Каментарий"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 98); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(61, 13); + this.label3.TabIndex = 6; + this.label3.Text = "Категория"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(7, 59); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(50, 13); + this.label2.TabIndex = 5; + this.label2.Text = "Артикул"; + // // label1 // this.label1.AutoSize = true; @@ -150,29 +305,32 @@ private void InitializeComponent() this.label1.TabIndex = 4; this.label1.Text = "Название"; // - // AddGoodsComboBoxEditCategory + // addGoodsTextBoxComent // - this.AddGoodsComboBoxEditCategory.Location = new System.Drawing.Point(5, 112); - this.AddGoodsComboBoxEditCategory.Name = "AddGoodsComboBoxEditCategory"; - this.AddGoodsComboBoxEditCategory.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.AddGoodsComboBoxEditCategory.Size = new System.Drawing.Size(341, 20); - this.AddGoodsComboBoxEditCategory.TabIndex = 3; + this.addGoodsTextBoxComent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.addGoodsTextBoxComent.Location = new System.Drawing.Point(5, 148); + this.addGoodsTextBoxComent.Name = "addGoodsTextBoxComent"; + this.addGoodsTextBoxComent.Size = new System.Drawing.Size(341, 20); + this.addGoodsTextBoxComent.TabIndex = 2; // - // AddGoodsTextBoxSKU + // addGoodsTextBoxSKU // - this.AddGoodsTextBoxSKU.Location = new System.Drawing.Point(5, 74); - this.AddGoodsTextBoxSKU.Name = "AddGoodsTextBoxSKU"; - this.AddGoodsTextBoxSKU.Size = new System.Drawing.Size(341, 20); - this.AddGoodsTextBoxSKU.TabIndex = 1; + this.addGoodsTextBoxSKU.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.addGoodsTextBoxSKU.Location = new System.Drawing.Point(5, 74); + this.addGoodsTextBoxSKU.Name = "addGoodsTextBoxSKU"; + this.addGoodsTextBoxSKU.Size = new System.Drawing.Size(341, 20); + this.addGoodsTextBoxSKU.TabIndex = 1; // - // AddGoodsTextBoxName + // addGoodsTextBoxName // - this.AddGoodsTextBoxName.Location = new System.Drawing.Point(5, 36); - this.AddGoodsTextBoxName.Name = "AddGoodsTextBoxName"; - this.AddGoodsTextBoxName.Size = new System.Drawing.Size(341, 20); - this.AddGoodsTextBoxName.TabIndex = 0; - // this.AddGoodsTextBoxName.EditValueChanged += new System.EventHandler(this.textEdit1_EditValueChanged); + this.addGoodsTextBoxName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.addGoodsTextBoxName.Location = new System.Drawing.Point(5, 36); + this.addGoodsTextBoxName.Name = "addGoodsTextBoxName"; + this.addGoodsTextBoxName.Size = new System.Drawing.Size(341, 20); + this.addGoodsTextBoxName.TabIndex = 0; // // layoutControlGroup1 // @@ -184,7 +342,7 @@ private void InitializeComponent() this.layoutControlItem5}); this.layoutControlGroup1.Location = new System.Drawing.Point(0, 0); this.layoutControlGroup1.Name = "Root"; - this.layoutControlGroup1.Size = new System.Drawing.Size(725, 353); + this.layoutControlGroup1.Size = new System.Drawing.Size(725, 380); this.layoutControlGroup1.TextVisible = false; // // layoutControlItem1 @@ -192,7 +350,7 @@ private void InitializeComponent() this.layoutControlItem1.Control = this.groupControl1; this.layoutControlItem1.Location = new System.Drawing.Point(0, 0); this.layoutControlItem1.Name = "layoutControlItem1"; - this.layoutControlItem1.Size = new System.Drawing.Size(355, 184); + this.layoutControlItem1.Size = new System.Drawing.Size(355, 212); this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0); this.layoutControlItem1.TextVisible = false; // @@ -201,149 +359,65 @@ private void InitializeComponent() this.layoutControlItem2.Control = this.groupControl2; this.layoutControlItem2.Location = new System.Drawing.Point(355, 0); this.layoutControlItem2.Name = "layoutControlItem2"; - this.layoutControlItem2.Size = new System.Drawing.Size(350, 184); + this.layoutControlItem2.Size = new System.Drawing.Size(350, 212); this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0); this.layoutControlItem2.TextVisible = false; // - // AddGoodsCheckBoxIsActive - // - this.AddGoodsCheckBoxIsActive.AutoSize = true; - this.AddGoodsCheckBoxIsActive.Location = new System.Drawing.Point(6, 151); - this.AddGoodsCheckBoxIsActive.Name = "AddGoodsCheckBoxIsActive"; - this.AddGoodsCheckBoxIsActive.Size = new System.Drawing.Size(77, 17); - this.AddGoodsCheckBoxIsActive.TabIndex = 3; - this.AddGoodsCheckBoxIsActive.Text = "Активный"; - this.AddGoodsCheckBoxIsActive.UseVisualStyleBackColor = true; - // - // AddGoodsSaveButton - // - this.AddGoodsSaveButton.Location = new System.Drawing.Point(271, 151); - this.AddGoodsSaveButton.Name = "AddGoodsSaveButton"; - this.AddGoodsSaveButton.Size = new System.Drawing.Size(75, 23); - this.AddGoodsSaveButton.TabIndex = 1; - this.AddGoodsSaveButton.Text = "Сохранить"; - this.AddGoodsSaveButton.UseVisualStyleBackColor = true; - // this.AddGoodsSaveButton.Click += new System.EventHandler(this.AddGoodsSaveButton_Click); - // - // groupControl4 - // - this.groupControl4.Controls.Add(this.textBox1); - this.groupControl4.Location = new System.Drawing.Point(12, 196); - this.groupControl4.Name = "groupControl4"; - this.groupControl4.Size = new System.Drawing.Size(701, 145); - this.groupControl4.TabIndex = 1; - this.groupControl4.Text = "История коментариев"; - // // layoutControlItem5 // this.layoutControlItem5.Control = this.groupControl4; - this.layoutControlItem5.Location = new System.Drawing.Point(0, 184); + this.layoutControlItem5.Location = new System.Drawing.Point(0, 212); this.layoutControlItem5.Name = "layoutControlItem5"; - this.layoutControlItem5.Size = new System.Drawing.Size(705, 149); + this.layoutControlItem5.Size = new System.Drawing.Size(705, 148); this.layoutControlItem5.TextSize = new System.Drawing.Size(0, 0); this.layoutControlItem5.TextVisible = false; // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(5, 23); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(691, 117); - this.textBox1.TabIndex = 0; - // - // AddGoodsTextBoxComent - // - this.AddGoodsTextBoxComent.Location = new System.Drawing.Point(5, 148); - this.AddGoodsTextBoxComent.Name = "AddGoodsTextBoxComent"; - this.AddGoodsTextBoxComent.Size = new System.Drawing.Size(341, 20); - this.AddGoodsTextBoxComent.TabIndex = 2; - //this.AddGoodsTextBoxComent.EditValueChanged += new System.EventHandler(this.textEdit3_EditValueChanged); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(7, 59); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(50, 13); - this.label2.TabIndex = 5; - this.label2.Text = "Артикул"; + // saveGoodsButton // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(6, 98); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(61, 13); - this.label3.TabIndex = 6; - this.label3.Text = "Категория"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(6, 133); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(68, 13); - this.label4.TabIndex = 7; - this.label4.Text = "Каментарий"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(5, 20); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(33, 13); - this.label5.TabIndex = 4; - this.label5.Text = "Цена"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(8, 59); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(67, 13); - this.label6.TabIndex = 5; - this.label6.Text = "Количество"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(8, 96); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(79, 13); - this.label7.TabIndex = 6; - this.label7.Text = "Пользователь"; + this.saveGoodsButton.Caption = "Сохранить"; + this.saveGoodsButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveGoodsButton.Glyph"))); + this.saveGoodsButton.Id = 1; + this.saveGoodsButton.MergeOrder = 1; + this.saveGoodsButton.Name = "saveGoodsButton"; + this.saveGoodsButton.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large; + this.saveGoodsButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveGoodsButton_ItemClick); // // AddGoods // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(725, 353); + this.ClientSize = new System.Drawing.Size(725, 380); + this.Controls.Add(this.ribbonControl1); this.Controls.Add(this.layoutControl1); this.Name = "AddGoods"; this.Text = "AddGoods"; ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit(); this.layoutControl1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.groupControl4)).EndInit(); + this.groupControl4.ResumeLayout(false); + this.groupControl4.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.groupControl2)).EndInit(); this.groupControl2.ResumeLayout(false); this.groupControl2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsCheckBoxIsActive.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxUser.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxCount.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxPrice.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxCount.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxPrice.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit(); this.groupControl1.ResumeLayout(false); this.groupControl1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsComboBoxEditCategory.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxSKU.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxName.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsLookUpEditCategory.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.productCategoryBindingSource)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxComent.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxSKU.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxName.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.groupControl4)).EndInit(); - this.groupControl4.ResumeLayout(false); - this.groupControl4.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxComent.Properties)).EndInit(); this.ResumeLayout(false); + this.PerformLayout(); } @@ -356,23 +430,28 @@ private void InitializeComponent() private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1; private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2; private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxUser; - private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxCount; - private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxPrice; + private DevExpress.XtraEditors.TextEdit addGoodsTextBoxCount; + private DevExpress.XtraEditors.TextEdit addGoodsTextBoxPrice; private System.Windows.Forms.Label label1; - private DevExpress.XtraEditors.ComboBoxEdit AddGoodsComboBoxEditCategory; - private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxSKU; - private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxName; - private System.Windows.Forms.Button AddGoodsSaveButton; - private System.Windows.Forms.CheckBox AddGoodsCheckBoxIsActive; + private DevExpress.XtraEditors.TextEdit addGoodsTextBoxSKU; + private DevExpress.XtraEditors.TextEdit addGoodsTextBoxName; private DevExpress.XtraEditors.GroupControl groupControl4; private System.Windows.Forms.TextBox textBox1; private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5; - private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxComent; + private DevExpress.XtraEditors.TextEdit addGoodsTextBoxComent; private System.Windows.Forms.Label label7; private System.Windows.Forms.Label label6; private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label2; + private DevExpress.XtraBars.Ribbon.RibbonControl ribbonControl1; + private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage; + private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveOrEditribbonPageGroup; + private DevExpress.XtraEditors.LookUpEdit addGoodsLookUpEditCategory; + private System.Windows.Forms.BindingSource productCategoryBindingSource; + private DevExpress.XtraEditors.CheckEdit addGoodsCheckBoxIsActive; + private DevExpress.XtraBars.BarButtonItem saveGoodsButton1; + private DevExpress.XtraBars.BarButtonItem saveGoodsButton; } } \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.cs new file mode 100644 index 0000000..33650f0 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.cs @@ -0,0 +1,116 @@ +using DevExpress.XtraEditors; +using Domain.Entities; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ContosoUI.GoodsAll.AddGoods +{ + public partial class AddGoods : XtraForm + { + private readonly AddGoodsPresenter presenter; + int idGoods; + BindingSource bs; + + public AddGoods(int id = -1) + { + InitializeComponent(); + presenter = new AddGoodsPresenter(this, id); + bs = new BindingSource(); + bs.DataSource = presenter; + this.Text = "Редактировать товар"; + // addGoodsCheckBoxIsActive.Checked = true; + if (presenter.Categories.Count < 1) + { + MessageBox.Show("Нет категорий товаров. Невозможно добавить новый товар"); + //return; + } + + else + { + addGoodsTextBoxName.DataBindings.Add("EditValue", bs, "Name"); + addGoodsTextBoxSKU.DataBindings.Add("EditValue", bs, "SKU"); + addGoodsTextBoxCount.DataBindings.Add("EditValue", bs, "Count"); + addGoodsTextBoxPrice.DataBindings.Add("EditValue", bs, "Price"); + + addGoodsLookUpEditCategory.Properties.DataSource = presenter.Categories; + addGoodsLookUpEditCategory.DataBindings.Add("EditValue", bs, "Category"); + + addGoodsTextBoxComent.DataBindings.Add("EditValue", bs, "CurentComment"); + + addGoodsCheckBoxIsActive.DataBindings.Add("EditValue", bs, "IsActive"); + + } + + } + + + private void saveGoodsButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + + + } + + private void addGoodsCheckBoxIsActive_CheckedChanged(object sender, EventArgs e) + { + bs.EndEdit(); + } + + private void saveGoodsButton1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + if (addGoodsTextBoxName.Text == "" || addGoodsTextBoxSKU.Text == "" || addGoodsTextBoxPrice.Text == "" || + addGoodsTextBoxCount.Text == "") + { MessageBox.Show("Вы заполнили не все поля"); + return; + } + if (addGoodsTextBoxName.Text.Length > 255) + { MessageBox.Show("Значие поля Название слишком длинное"); + return; + } + + if (addGoodsTextBoxSKU.Text.Length > 50) + { MessageBox.Show("Значение поля Артикул слишком длинное"); + return; + } + double price; + Int16 count; + Goods goods = new Goods(); + goods.Name = addGoodsTextBoxName.Text; + goods.SKU = addGoodsTextBoxSKU.Text; + if (!Double.TryParse(addGoodsTextBoxPrice.Text, out price)) + { MessageBox.Show("Вы заполнили поле Цена неправильно"); + return; + }; + goods.Price = price; + Comment newComment = new Comment(); + newComment.Message = addGoodsTextBoxComent.Text; + goods.Coments.Add(newComment); + if (!Int16.TryParse(addGoodsTextBoxCount.Text, out count)) + { MessageBox.Show("Вы заполнили поле Количество неправильно"); + return; + }; + goods.Count = count; + + if (addGoodsCheckBoxIsActive.Checked) + { + goods.IsActive = true; + } + else goods.IsActive = false; + + + var categorySt = addGoodsLookUpEditCategory.GetColumnValue("Id"); + //goods.Category=categorySt; + bs.EndEdit(); + presenter.Save(); + + } + + + } +} diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.resx b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.resx new file mode 100644 index 0000000..93df5f6 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.resx @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + rkJggg== + + + + 17, 17 + + + + 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 + rkJggg== + + + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.Designer.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.Designer.cs similarity index 57% rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.Designer.cs rename to Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.Designer.cs index ef61c70..57c6e03 100644 --- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.Designer.cs +++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.Designer.cs @@ -30,13 +30,12 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); DevExpress.XtraGrid.GridLevelNode gridLevelNode1 = new DevExpress.XtraGrid.GridLevelNode(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GoodsForm)); this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl(); - this.GoodsPrintButton = new System.Windows.Forms.Button(); - this.IsActiveCheckBox = new System.Windows.Forms.CheckBox(); - this.GoodsButtonSave = new System.Windows.Forms.Button(); - this.GoodsGridControl = new DevExpress.XtraGrid.GridControl(); + this.isActiveCheckBox = new System.Windows.Forms.CheckBox(); + this.goodsGridControl = new DevExpress.XtraGrid.GridControl(); this.goodsBindingSource = new System.Windows.Forms.BindingSource(this.components); - this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.goodsGreedView = new DevExpress.XtraGrid.Views.Grid.GridView(); this.colName = new DevExpress.XtraGrid.Columns.GridColumn(); this.colSKU = new DevExpress.XtraGrid.Columns.GridColumn(); this.colPrice = new DevExpress.XtraGrid.Columns.GridColumn(); @@ -47,13 +46,11 @@ private void InitializeComponent() this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn(); this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn(); this.gridView2 = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.GoodsComboBoxCategory = new DevExpress.XtraEditors.ComboBoxEdit(); + this.goodsComboBoxCategory = new DevExpress.XtraEditors.ComboBoxEdit(); this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup(); this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem(); this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem(); this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem(); this.colName1 = new DevExpress.XtraGrid.Columns.GridColumn(); this.colSKU1 = new DevExpress.XtraGrid.Columns.GridColumn(); this.colPrice1 = new DevExpress.XtraGrid.Columns.GridColumn(); @@ -62,28 +59,35 @@ private void InitializeComponent() this.colUser1 = new DevExpress.XtraGrid.Columns.GridColumn(); this.colId1 = new DevExpress.XtraGrid.Columns.GridColumn(); this.colIsActive1 = new DevExpress.XtraGrid.Columns.GridColumn(); + this.ribbonControl1 = new DevExpress.XtraBars.Ribbon.RibbonControl(); + this.exportBarButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.printBarButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.SearchbarButtonItem1 = new DevExpress.XtraBars.BarButtonItem(); + this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); + this.saveOrEditribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); + this.searchRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); + this.ribbonPageGroup2 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); + this.ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); + this.ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage(); ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit(); this.layoutControl1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.GoodsGridControl)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodsGridControl)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.goodsBindingSource)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodsGreedView)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.gridView2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.GoodsComboBoxCategory.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodsComboBoxCategory.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).BeginInit(); this.SuspendLayout(); // // layoutControl1 // - this.layoutControl1.Controls.Add(this.GoodsPrintButton); - this.layoutControl1.Controls.Add(this.IsActiveCheckBox); - this.layoutControl1.Controls.Add(this.GoodsButtonSave); - this.layoutControl1.Controls.Add(this.GoodsGridControl); - this.layoutControl1.Controls.Add(this.GoodsComboBoxCategory); + this.layoutControl1.Controls.Add(this.isActiveCheckBox); + this.layoutControl1.Controls.Add(this.goodsGridControl); + this.layoutControl1.Controls.Add(this.goodsComboBoxCategory); this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.layoutControl1.Location = new System.Drawing.Point(0, 0); this.layoutControl1.Name = "layoutControl1"; @@ -93,60 +97,38 @@ private void InitializeComponent() this.layoutControl1.TabIndex = 1; this.layoutControl1.Text = "layoutControl1"; // - // GoodsPrintButton + // isActiveCheckBox // - this.GoodsPrintButton.Location = new System.Drawing.Point(541, 12); - this.GoodsPrintButton.Name = "GoodsPrintButton"; - this.GoodsPrintButton.Size = new System.Drawing.Size(148, 20); - this.GoodsPrintButton.TabIndex = 8; - this.GoodsPrintButton.Text = "Печать"; - this.GoodsPrintButton.UseVisualStyleBackColor = true; - this.GoodsPrintButton.Click += new System.EventHandler(this.GoodsPrintButton_Click); + this.isActiveCheckBox.Location = new System.Drawing.Point(436, 12); + this.isActiveCheckBox.Name = "isActiveCheckBox"; + this.isActiveCheckBox.Size = new System.Drawing.Size(423, 20); + this.isActiveCheckBox.TabIndex = 7; + this.isActiveCheckBox.Text = "Товар активен"; + this.isActiveCheckBox.UseVisualStyleBackColor = true; + this.isActiveCheckBox.CheckedChanged += new System.EventHandler(this.IsActiveCheckBox_CheckedChanged); // - // IsActiveCheckBox + // goodsGridControl // - this.IsActiveCheckBox.Location = new System.Drawing.Point(436, 12); - this.IsActiveCheckBox.Name = "IsActiveCheckBox"; - this.IsActiveCheckBox.Size = new System.Drawing.Size(101, 20); - this.IsActiveCheckBox.TabIndex = 7; - this.IsActiveCheckBox.Text = "Товар активен"; - this.IsActiveCheckBox.UseVisualStyleBackColor = true; - this.IsActiveCheckBox.CheckedChanged += new System.EventHandler(this.IsActiveCheckBox_CheckedChanged); - // - // GoodsButtonSave - // - this.GoodsButtonSave.Location = new System.Drawing.Point(693, 12); - this.GoodsButtonSave.Name = "GoodsButtonSave"; - this.GoodsButtonSave.Size = new System.Drawing.Size(166, 20); - this.GoodsButtonSave.TabIndex = 6; - this.GoodsButtonSave.Text = "Сохранить"; - this.GoodsButtonSave.UseVisualStyleBackColor = true; - this.GoodsButtonSave.Click += new System.EventHandler(this.GoodsButtonSave_Click); - // - // GoodsGridControl - // - this.GoodsGridControl.DataSource = this.goodsBindingSource; + this.goodsGridControl.DataSource = this.goodsBindingSource; gridLevelNode1.RelationName = "Level1"; - this.GoodsGridControl.LevelTree.Nodes.AddRange(new DevExpress.XtraGrid.GridLevelNode[] { + this.goodsGridControl.LevelTree.Nodes.AddRange(new DevExpress.XtraGrid.GridLevelNode[] { gridLevelNode1}); - this.GoodsGridControl.Location = new System.Drawing.Point(12, 52); - this.GoodsGridControl.MainView = this.gridView1; - this.GoodsGridControl.Name = "GoodsGridControl"; - this.GoodsGridControl.Size = new System.Drawing.Size(847, 315); - this.GoodsGridControl.TabIndex = 5; - this.GoodsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.gridView1, + this.goodsGridControl.Location = new System.Drawing.Point(12, 52); + this.goodsGridControl.MainView = this.goodsGreedView; + this.goodsGridControl.Name = "goodsGridControl"; + this.goodsGridControl.Size = new System.Drawing.Size(847, 315); + this.goodsGridControl.TabIndex = 5; + this.goodsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.goodsGreedView, this.gridView2}); - this.GoodsGridControl.Click += new System.EventHandler(this.GoodsGridControl_Click); - this.GoodsGridControl.DoubleClick += new System.EventHandler(this.GoodsGridControl_Click); // // goodsBindingSource // this.goodsBindingSource.DataSource = typeof(Domain.Entities.Goods); // - // gridView1 + // goodsGreedView // - this.gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.goodsGreedView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { this.colName, this.colSKU, this.colPrice, @@ -156,8 +138,10 @@ private void InitializeComponent() this.colId, this.colIsActive, this.colEditTime}); - this.gridView1.GridControl = this.GoodsGridControl; - this.gridView1.Name = "gridView1"; + this.goodsGreedView.GridControl = this.goodsGridControl; + this.goodsGreedView.Name = "goodsGreedView"; + this.goodsGreedView.OptionsBehavior.Editable = false; + this.goodsGreedView.DoubleClick += new System.EventHandler(this.goodsGreedView_DoubleClick); // // colName // @@ -198,46 +182,39 @@ private void InitializeComponent() // this.colUser.FieldName = "User"; this.colUser.Name = "colUser"; - this.colUser.Visible = true; - this.colUser.VisibleIndex = 5; // // colId // this.colId.FieldName = "Id"; this.colId.Name = "colId"; - this.colId.Visible = true; - this.colId.VisibleIndex = 6; // // colIsActive // this.colIsActive.FieldName = "IsActive"; this.colIsActive.Name = "colIsActive"; - this.colIsActive.Visible = true; - this.colIsActive.VisibleIndex = 7; // // colEditTime // this.colEditTime.FieldName = "EditTime"; this.colEditTime.Name = "colEditTime"; - this.colEditTime.Visible = true; - this.colEditTime.VisibleIndex = 8; // // gridView2 // - this.gridView2.GridControl = this.GoodsGridControl; + this.gridView2.GridControl = this.goodsGridControl; this.gridView2.Name = "gridView2"; // - // GoodsComboBoxCategory + // goodsComboBoxCategory // - this.GoodsComboBoxCategory.EditValue = "Категории продуктов"; - this.GoodsComboBoxCategory.Location = new System.Drawing.Point(108, 12); - this.GoodsComboBoxCategory.Name = "GoodsComboBoxCategory"; - this.GoodsComboBoxCategory.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + this.goodsComboBoxCategory.EditValue = ""; + this.goodsComboBoxCategory.Location = new System.Drawing.Point(121, 12); + this.goodsComboBoxCategory.Name = "goodsComboBoxCategory"; + this.goodsComboBoxCategory.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.GoodsComboBoxCategory.Size = new System.Drawing.Size(324, 20); - this.GoodsComboBoxCategory.StyleController = this.layoutControl1; - this.GoodsComboBoxCategory.TabIndex = 4; - this.GoodsComboBoxCategory.SelectedIndexChanged += new System.EventHandler(this.GoodsComboBoxCategory_SelectedIndexChanged); + this.goodsComboBoxCategory.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; + this.goodsComboBoxCategory.Size = new System.Drawing.Size(311, 20); + this.goodsComboBoxCategory.StyleController = this.layoutControl1; + this.goodsComboBoxCategory.TabIndex = 4; + this.goodsComboBoxCategory.SelectedIndexChanged += new System.EventHandler(this.GoodsComboBoxCategory_SelectedIndexChanged); // // layoutControlGroup1 // @@ -246,9 +223,7 @@ private void InitializeComponent() this.layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { this.layoutControlItem2, this.layoutControlItem1, - this.layoutControlItem3, - this.layoutControlItem4, - this.layoutControlItem5}); + this.layoutControlItem4}); this.layoutControlGroup1.Location = new System.Drawing.Point(0, 0); this.layoutControlGroup1.Name = "Root"; this.layoutControlGroup1.Size = new System.Drawing.Size(871, 379); @@ -257,49 +232,32 @@ private void InitializeComponent() // // layoutControlItem2 // - this.layoutControlItem2.Control = this.GoodsGridControl; + this.layoutControlItem2.Control = this.goodsGridControl; this.layoutControlItem2.Location = new System.Drawing.Point(0, 24); this.layoutControlItem2.Name = "layoutControlItem2"; this.layoutControlItem2.Size = new System.Drawing.Size(851, 335); this.layoutControlItem2.Text = " "; this.layoutControlItem2.TextLocation = DevExpress.Utils.Locations.Top; - this.layoutControlItem2.TextSize = new System.Drawing.Size(93, 13); + this.layoutControlItem2.TextSize = new System.Drawing.Size(106, 13); // // layoutControlItem1 // - this.layoutControlItem1.Control = this.GoodsComboBoxCategory; + this.layoutControlItem1.Control = this.goodsComboBoxCategory; this.layoutControlItem1.Location = new System.Drawing.Point(0, 0); this.layoutControlItem1.Name = "layoutControlItem1"; this.layoutControlItem1.Size = new System.Drawing.Size(424, 24); - this.layoutControlItem1.TextSize = new System.Drawing.Size(93, 13); - // - // layoutControlItem3 - // - this.layoutControlItem3.Control = this.GoodsButtonSave; - this.layoutControlItem3.Location = new System.Drawing.Point(681, 0); - this.layoutControlItem3.Name = "layoutControlItem3"; - this.layoutControlItem3.Size = new System.Drawing.Size(170, 24); - this.layoutControlItem3.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem3.TextVisible = false; + this.layoutControlItem1.Text = "Категория продукта"; + this.layoutControlItem1.TextSize = new System.Drawing.Size(106, 13); // // layoutControlItem4 // - this.layoutControlItem4.Control = this.IsActiveCheckBox; + this.layoutControlItem4.Control = this.isActiveCheckBox; this.layoutControlItem4.Location = new System.Drawing.Point(424, 0); this.layoutControlItem4.Name = "layoutControlItem4"; - this.layoutControlItem4.Size = new System.Drawing.Size(105, 24); + this.layoutControlItem4.Size = new System.Drawing.Size(427, 24); this.layoutControlItem4.TextSize = new System.Drawing.Size(0, 0); this.layoutControlItem4.TextVisible = false; // - // layoutControlItem5 - // - this.layoutControlItem5.Control = this.GoodsPrintButton; - this.layoutControlItem5.Location = new System.Drawing.Point(529, 0); - this.layoutControlItem5.Name = "layoutControlItem5"; - this.layoutControlItem5.Size = new System.Drawing.Size(152, 24); - this.layoutControlItem5.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem5.TextVisible = false; - // // colName1 // this.colName1.FieldName = "Name"; @@ -340,37 +298,122 @@ private void InitializeComponent() this.colIsActive1.FieldName = "IsActive"; this.colIsActive1.Name = "colIsActive1"; // + // ribbonControl1 + // + this.ribbonControl1.ExpandCollapseItem.Id = 0; + this.ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { + this.ribbonControl1.ExpandCollapseItem, + this.exportBarButtonItem, + this.printBarButtonItem, + this.SearchbarButtonItem1}); + this.ribbonControl1.Location = new System.Drawing.Point(0, 0); + this.ribbonControl1.MaxItemId = 6; + this.ribbonControl1.Name = "ribbonControl1"; + this.ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { + this.mainRibbonPage}); + this.ribbonControl1.Size = new System.Drawing.Size(871, 141); + this.ribbonControl1.ToolbarLocation = DevExpress.XtraBars.Ribbon.RibbonQuickAccessToolbarLocation.Above; + // + // exportBarButtonItem + // + this.exportBarButtonItem.Caption = "Экспорт"; + this.exportBarButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("exportBarButtonItem.Glyph"))); + this.exportBarButtonItem.Id = 1; + this.exportBarButtonItem.Name = "exportBarButtonItem"; + this.exportBarButtonItem.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large; + this.exportBarButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.exportBarButtonItem_ItemClick); + // + // printBarButtonItem + // + this.printBarButtonItem.Caption = "Печать"; + this.printBarButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("printBarButtonItem.Glyph"))); + this.printBarButtonItem.Id = 3; + this.printBarButtonItem.Name = "printBarButtonItem"; + this.printBarButtonItem.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large; + // + // SearchbarButtonItem1 + // + this.SearchbarButtonItem1.Caption = "Поиск"; + this.SearchbarButtonItem1.Glyph = ((System.Drawing.Image)(resources.GetObject("SearchbarButtonItem1.Glyph"))); + this.SearchbarButtonItem1.Id = 5; + this.SearchbarButtonItem1.MergeOrder = 1; + this.SearchbarButtonItem1.Name = "SearchbarButtonItem1"; + this.SearchbarButtonItem1.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large; + this.SearchbarButtonItem1.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.SearchbarButtonItem1_ItemClick); + // + // mainRibbonPage + // + this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { + this.saveOrEditribbonPageGroup, + this.searchRibbonPageGroup}); + this.mainRibbonPage.Name = "mainRibbonPage"; + this.mainRibbonPage.Text = "Меню"; + // + // saveOrEditribbonPageGroup + // + this.saveOrEditribbonPageGroup.ItemLinks.Add(this.exportBarButtonItem); + this.saveOrEditribbonPageGroup.ItemLinks.Add(this.printBarButtonItem); + this.saveOrEditribbonPageGroup.MergeOrder = 5; + this.saveOrEditribbonPageGroup.Name = "saveOrEditribbonPageGroup"; + this.saveOrEditribbonPageGroup.Text = "Сохранение"; + // + // searchRibbonPageGroup + // + this.searchRibbonPageGroup.ItemLinks.Add(this.SearchbarButtonItem1); + this.searchRibbonPageGroup.MergeOrder = 6; + this.searchRibbonPageGroup.Name = "searchRibbonPageGroup"; + this.searchRibbonPageGroup.Text = "Поиск"; + // + // ribbonPageGroup2 + // + this.ribbonPageGroup2.Name = "ribbonPageGroup2"; + this.ribbonPageGroup2.Text = "ribbonPageGroup2"; + // + // ribbonPageGroup1 + // + this.ribbonPageGroup1.Name = "ribbonPageGroup1"; + this.ribbonPageGroup1.Text = "ribbonPageGroup1"; + // + // ribbonPage1 + // + this.ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { + this.ribbonPageGroup1, + this.ribbonPageGroup2}); + this.ribbonPage1.Name = "ribbonPage1"; + this.ribbonPage1.Text = "ribbonPage1"; + // // GoodsForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(871, 379); + this.Controls.Add(this.ribbonControl1); this.Controls.Add(this.layoutControl1); this.Name = "GoodsForm"; - this.Text = "GoodsForm"; + this.Text = "Список товаров"; ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit(); this.layoutControl1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.GoodsGridControl)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodsGridControl)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.goodsBindingSource)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodsGreedView)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.gridView2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.GoodsComboBoxCategory.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodsComboBoxCategory.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).EndInit(); this.ResumeLayout(false); + this.PerformLayout(); } #endregion private DevExpress.XtraLayout.LayoutControl layoutControl1; - private DevExpress.XtraGrid.GridControl GoodsGridControl; - private DevExpress.XtraGrid.Views.Grid.GridView gridView1; - private DevExpress.XtraEditors.ComboBoxEdit GoodsComboBoxCategory; + private DevExpress.XtraGrid.GridControl goodsGridControl; + private DevExpress.XtraGrid.Views.Grid.GridView goodsGreedView; + private DevExpress.XtraEditors.ComboBoxEdit goodsComboBoxCategory; private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1; private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2; private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1; @@ -384,12 +427,8 @@ private void InitializeComponent() private DevExpress.XtraGrid.Columns.GridColumn colId; private DevExpress.XtraGrid.Columns.GridColumn colIsActive; private DevExpress.XtraGrid.Columns.GridColumn colEditTime; - private System.Windows.Forms.CheckBox IsActiveCheckBox; - private System.Windows.Forms.Button GoodsButtonSave; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3; + private System.Windows.Forms.CheckBox isActiveCheckBox; private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4; - private System.Windows.Forms.Button GoodsPrintButton; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5; private DevExpress.XtraGrid.Views.Grid.GridView gridView2; private DevExpress.XtraGrid.Columns.GridColumn colName1; private DevExpress.XtraGrid.Columns.GridColumn colSKU1; @@ -399,5 +438,15 @@ private void InitializeComponent() private DevExpress.XtraGrid.Columns.GridColumn colUser1; private DevExpress.XtraGrid.Columns.GridColumn colId1; private DevExpress.XtraGrid.Columns.GridColumn colIsActive1; + private DevExpress.XtraBars.Ribbon.RibbonControl ribbonControl1; + private DevExpress.XtraBars.BarButtonItem exportBarButtonItem; + private DevExpress.XtraBars.BarButtonItem printBarButtonItem; + private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup2; + private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1; + private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1; + private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage; + private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveOrEditribbonPageGroup; + private DevExpress.XtraBars.Ribbon.RibbonPageGroup searchRibbonPageGroup; + private DevExpress.XtraBars.BarButtonItem SearchbarButtonItem1; } } \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.cs similarity index 58% rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.cs rename to Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.cs index bcaf4e2..112c988 100644 --- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.cs +++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.cs @@ -23,39 +23,51 @@ public GoodsForm() List categoryList = new List(); InitializeComponent(); presenter = new GoodsPresenter(this); - GoodsComboBoxCategory.Properties.Items.Add("Все"); - GoodsComboBoxCategory.Properties.Items.AddRange(presenter.productCategoryList.ToArray()); - // GoodsComboBoxCategory.SelectedIndex = 0; - - this.GoodsComboBoxCategory.SelectedIndexChanged += new EventHandler(GoodsComboBoxCategory_SelectedIndexChanged); + goodsComboBoxCategory.Properties.Items.Add("Все"); + goodsComboBoxCategory.Properties.Items.AddRange(presenter.productCategoryList.ToArray()); + goodsComboBoxCategory.SelectedIndex = 0; + this.goodsComboBoxCategory.SelectedIndexChanged += new EventHandler(GoodsComboBoxCategory_SelectedIndexChanged); + isActiveCheckBox.Checked = true; } public void SetGoodsCategory(List categoryList) { foreach (ProductCategory productCategory in categoryList) { - GoodsComboBoxCategory.Properties.Items.Add("Все"); - GoodsComboBoxCategory.Properties.Items.Add(productCategory.CategoryName); + goodsComboBoxCategory.Properties.Items.Add("Все"); + goodsComboBoxCategory.Properties.Items.Add(productCategory.CategoryName); } } private void IsActiveCheckBox_CheckedChanged(object sender, EventArgs e) { - this.goodsBindingSource.DataSource = presenter.SearchGoodsOnActivity(IsActiveCheckBox.Checked); + this.goodsBindingSource.DataSource = presenter.SearchGoodsOnActivity(isActiveCheckBox.Checked); + goodsGridControl.RefreshDataSource(); } private void GoodsComboBoxCategory_SelectedIndexChanged(object sender, EventArgs e) { - //this.goodsBindingSource.Clear(); - this.goodsBindingSource.DataSource = presenter.SearchGoodsOnCategory(GoodsComboBoxCategory.SelectedItem.ToString()); - GoodsGridControl.RefreshDataSource(); + this.goodsBindingSource.DataSource = presenter.SearchGoodsOnCategory(goodsComboBoxCategory.SelectedItem.ToString(), isActiveCheckBox.Checked); + goodsGridControl.RefreshDataSource(); } - private void GoodsGridControl_Click(object sender, EventArgs e) + private void GoodsPrintBarButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { - GridHitInfo hitInfo = gridView1.CalcHitInfo(GoodsGridControl.PointToClient(MousePosition)); - if (hitInfo.InRowCell) + goodsGridControl.ShowPrintPreview(); + goodsGridControl.Print(); + } + + + private void GoodsComboBoxCategory_TextChanged(object sender, EventArgs e) + { + presenter.productCategoryList.Add(goodsComboBoxCategory.Text); + } + + private void goodsGreedView_DoubleClick(object sender, EventArgs e) + { + GridHitInfo hitInfo = goodsGreedView.CalcHitInfo(goodsGridControl.PointToClient(MousePosition)); + if (hitInfo.InRow || hitInfo.InRowCell) { GridView gv = (GridView)sender; GridHitInfo gridInfo = gv.CalcHitInfo(gv.GridControl.PointToClient(Control.MousePosition)); @@ -65,35 +77,16 @@ private void GoodsGridControl_Click(object sender, EventArgs e) frm.MdiParent = this.MdiParent; frm.Show(); } - } - private void GoodsButtonSave_Click(object sender, EventArgs e) + private void SearchbarButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { - SaveFileDialog saveDialog = new SaveFileDialog(); - saveDialog.Filter = "xls files (*.xls)|*.xls|All files(*.*)|*.*"; - - if (saveDialog.ShowDialog() == DialogResult.OK) - { - string fileName = saveDialog.FileName; - GoodsGridControl.ExportToXls(fileName); - - } - } - - private void GoodsPrintButton_Click(object sender, EventArgs e) - { - GoodsGridControl.ShowPrintPreview(); - GoodsGridControl.Print(); - } - - private void GoodsPrintBarButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - GoodsGridControl.ShowPrintPreview(); - GoodsGridControl.Print(); + this.goodsBindingSource.DataSource = presenter.SearchGoodsOnCategory(goodsComboBoxCategory.SelectedItem.ToString(), isActiveCheckBox.Checked); + + goodsGridControl.RefreshDataSource(); } - private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + private void exportBarButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.Filter = "xls files (*.xls)|*.xls|All files(*.*)|*.*"; @@ -101,11 +94,12 @@ private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemCli if (saveDialog.ShowDialog() == DialogResult.OK) { string fileName = saveDialog.FileName; - GoodsGridControl.ExportToXls(fileName); + goodsGridControl.ExportToXls(fileName); } } + } } diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.resx b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.resx new file mode 100644 index 0000000..af127b7 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.resx @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + rkJggg== + + + + + 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 + Ms4wYRfT/gu8o4xNyxWpOwAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsListViewModel.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsListViewModel.cs similarity index 93% rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsListViewModel.cs rename to Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsListViewModel.cs index d27f0e0..1ca07c8 100644 --- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsListViewModel.cs +++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsListViewModel.cs @@ -6,7 +6,7 @@ namespace ContosoUI.GoodsAll.GoodsF { - class GoodsListViewModel + public class GoodsListViewModel { public int Id { get; set; } public string Name { get; set; } diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsPresenter.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsPresenter.cs similarity index 67% rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsPresenter.cs rename to Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsPresenter.cs index 80d8cc9..caa4f3c 100644 --- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsPresenter.cs +++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsPresenter.cs @@ -1,4 +1,4 @@ -using Data.DumbData; +using Data.EFData; using Domain.DAO; using Domain.Entities; using System; @@ -10,10 +10,11 @@ namespace ContosoUI.GoodsAll.GoodsF { - class GoodsPresenter : INotifyPropertyChanged + public class GoodsPresenter : INotifyPropertyChanged//, IProductCategoryRepository { - private IGoodsRepository model = new GoodsDao(); - private IProductCategoryRepository modelCategory = new ProductCategoryDao(); + GoodsCategoryService service = new GoodsCategoryService(); + //private IGoodsRepository model = new EFGoodsDao(); + // private IProductCategoryRepository modelCategory = new ProductCategoryDao(); private GoodsForm goodsView; public List viewModel = new List(); @@ -24,7 +25,8 @@ class GoodsPresenter : INotifyPropertyChanged public GoodsPresenter(GoodsForm goodsView) { this.goodsView = goodsView; - foreach (ProductCategory pc in Storage.categoryCollection) + var categories = service.CategoryDao.GetAll().ToList(); + foreach (ProductCategory pc in categories) { productCategoryList.Add(pc.CategoryName); } @@ -32,11 +34,11 @@ public GoodsPresenter(GoodsForm goodsView) public List SearchGoodsOnActivity(bool isActive) { - goodsForLoad = model.GetAll().ToList(); + goodsForLoad = service.GoodsDao.GetAll().ToList(); viewModel.Clear(); foreach (Goods g in goodsForLoad) { - if (g.Category.IsActive == isActive) + if (g.IsActive) { viewModel.Add(new GoodsListViewModel { @@ -55,27 +57,30 @@ public List SearchGoodsOnActivity(bool isActive) return viewModel; } - public List SearchGoodsOnCategory(string category) + public List SearchGoodsOnCategory(string category, bool isActive) { - goodsForLoad = model.GetAll().ToList(); + goodsForLoad =service.GoodsDao.GetAll().ToList(); viewModel.Clear(); if (category == "Все") { foreach (Goods g in goodsForLoad) { - viewModel.Add(new GoodsListViewModel + if (g.IsActive == isActive) { - Id = g.Id, - Name = g.Name, - SKU = g.SKU, - Price = g.Price, - Count = g.Count, - Category = g.Category.CategoryName, - Coment = g.Coments.ToString(), - isActive = g.IsActive, - //User = g.User.Login - }); + viewModel.Add(new GoodsListViewModel + { + Id = g.Id, + Name = g.Name, + SKU = g.SKU, + Price = g.Price, + Count = g.Count, + Category = g.Category.CategoryName, + Coment = g.Coments.ToString(), + isActive = g.IsActive, + //User = g.User.Login + }); + } } } @@ -84,7 +89,7 @@ public List SearchGoodsOnCategory(string category) foreach (Goods g in goodsForLoad) { - if (g.Category.CategoryName == category) + if (g.Category.CategoryName == category&&g.IsActive==isActive) { viewModel.Add(new GoodsListViewModel { @@ -116,5 +121,6 @@ private void NotifyPropertyChanged(String info) PropertyChanged(this, new PropertyChangedEventArgs(info)); } } + } } diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.Designer.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.Designer.cs deleted file mode 100644 index ea89f08..0000000 --- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.Designer.cs +++ /dev/null @@ -1,159 +0,0 @@ -namespace ContosoUI.GoodsForm1 -{ - partial class GoodsForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.GoodsCategoryComboBoxDE = new DevExpress.XtraEditors.ComboBoxEdit(); - this.label1 = new System.Windows.Forms.Label(); - this.GoodsGroupBox = new System.Windows.Forms.GroupBox(); - this.GoodsButtonSearch = new System.Windows.Forms.Button(); - this.GoodsButtonReport = new System.Windows.Forms.Button(); - this.GoodsGridControl = new DevExpress.XtraGrid.GridControl(); - this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.GoodsButtonCancel = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.GoodsCategoryComboBoxDE.Properties)).BeginInit(); - this.GoodsGroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.GoodsGridControl)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit(); - this.SuspendLayout(); - // - // GoodsCategoryComboBoxDE - // - this.GoodsCategoryComboBoxDE.Location = new System.Drawing.Point(6, 35); - this.GoodsCategoryComboBoxDE.Name = "GoodsCategoryComboBoxDE"; - this.GoodsCategoryComboBoxDE.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.GoodsCategoryComboBoxDE.Size = new System.Drawing.Size(195, 20); - this.GoodsCategoryComboBoxDE.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(6, 16); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(93, 13); - this.label1.TabIndex = 1; - this.label1.Text = "Products category"; - // - // GoodsGroupBox - // - this.GoodsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.GoodsGroupBox.Controls.Add(this.GoodsButtonReport); - this.GoodsGroupBox.Controls.Add(this.GoodsButtonSearch); - this.GoodsGroupBox.Controls.Add(this.label1); - this.GoodsGroupBox.Controls.Add(this.GoodsCategoryComboBoxDE); - this.GoodsGroupBox.Location = new System.Drawing.Point(3, 2); - this.GoodsGroupBox.Name = "GoodsGroupBox"; - this.GoodsGroupBox.Size = new System.Drawing.Size(917, 100); - this.GoodsGroupBox.TabIndex = 2; - this.GoodsGroupBox.TabStop = false; - this.GoodsGroupBox.Text = "Filter"; - // - // GoodsButtonSearch - // - this.GoodsButtonSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.GoodsButtonSearch.Location = new System.Drawing.Point(836, 71); - this.GoodsButtonSearch.Name = "GoodsButtonSearch"; - this.GoodsButtonSearch.Size = new System.Drawing.Size(75, 23); - this.GoodsButtonSearch.TabIndex = 2; - this.GoodsButtonSearch.Text = "Search"; - this.GoodsButtonSearch.UseVisualStyleBackColor = true; - this.GoodsButtonSearch.Click += new System.EventHandler(this.GoodsButtonSearch_Click); - // - // GoodsButtonReport - // - this.GoodsButtonReport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.GoodsButtonReport.Location = new System.Drawing.Point(735, 71); - this.GoodsButtonReport.Name = "GoodsButtonReport"; - this.GoodsButtonReport.Size = new System.Drawing.Size(75, 23); - this.GoodsButtonReport.TabIndex = 3; - this.GoodsButtonReport.Text = "Report"; - this.GoodsButtonReport.UseVisualStyleBackColor = true; - this.GoodsButtonReport.Click += new System.EventHandler(this.GoodsButtonReport_Click); - // - // GoodsGridControl - // - this.GoodsGridControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.GoodsGridControl.Location = new System.Drawing.Point(3, 109); - this.GoodsGridControl.MainView = this.gridView1; - this.GoodsGridControl.Name = "GoodsGridControl"; - this.GoodsGridControl.Size = new System.Drawing.Size(917, 242); - this.GoodsGridControl.TabIndex = 3; - this.GoodsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.gridView1}); - // - // gridView1 - // - this.gridView1.GridControl = this.GoodsGridControl; - this.gridView1.Name = "gridView1"; - // - // GoodsButtonCancel - // - this.GoodsButtonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.GoodsButtonCancel.Location = new System.Drawing.Point(838, 358); - this.GoodsButtonCancel.Name = "GoodsButtonCancel"; - this.GoodsButtonCancel.Size = new System.Drawing.Size(75, 23); - this.GoodsButtonCancel.TabIndex = 4; - this.GoodsButtonCancel.Text = "Cancel"; - this.GoodsButtonCancel.UseVisualStyleBackColor = true; - this.GoodsButtonCancel.Click += new System.EventHandler(this.GoodsButtonCancel_Click); - // - // GoodsForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(919, 385); - this.Controls.Add(this.GoodsButtonCancel); - this.Controls.Add(this.GoodsGridControl); - this.Controls.Add(this.GoodsGroupBox); - this.Name = "GoodsForm"; - this.Text = "GoodsForm"; - ((System.ComponentModel.ISupportInitialize)(this.GoodsCategoryComboBoxDE.Properties)).EndInit(); - this.GoodsGroupBox.ResumeLayout(false); - this.GoodsGroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.GoodsGridControl)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private DevExpress.XtraEditors.ComboBoxEdit GoodsCategoryComboBoxDE; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.GroupBox GoodsGroupBox; - private System.Windows.Forms.Button GoodsButtonReport; - private System.Windows.Forms.Button GoodsButtonSearch; - private DevExpress.XtraGrid.GridControl GoodsGridControl; - private DevExpress.XtraGrid.Views.Grid.GridView gridView1; - private System.Windows.Forms.Button GoodsButtonCancel; - } -} \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.cs deleted file mode 100644 index c22b791..0000000 --- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Data.DumbData; -using Domain.Entities; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace ContosoUI.GoodsForm1 -{ - public partial class GoodsForm : Form, IGoodsView - { - int goodsID; - private GoodsPresenter presenter; - - public GoodsForm() - { - InitializeComponent(); - presenter = new GoodsPresenter(this, new GoodsModel());//тут ругается на this - } - - private void GoodsButtonSearch_Click(object sender, EventArgs e) - { - - - } - - private void GoodsButtonReport_Click(object sender, EventArgs e) - { - - } - - private void GoodsButtonCancel_Click(object sender, EventArgs e) - { - this.Close(); - } - - public void SetGoodsData(List goodsList) - { - throw new NotImplementedException(); - } - - public void SetGoodsCategory(List categoryList) - { - foreach (ProductCategory productCategory in categoryList) - { - GoodsCategoryComboBoxDE.Properties.Items.Add(productCategory.CategoryName); - } - } - - - public event EventHandler loadGoodsForm; - - public event EventHandler searchButtonClick; - } -} diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.resx b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.resx deleted file mode 100644 index 1af7de1..0000000 --- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsModel.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsModel.cs deleted file mode 100644 index 7969c6b..0000000 --- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsModel.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Data.DumbData; -using Domain.Entities; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ContosoUI -{ - class GoodsModel:IGoodsModel - { - - public List GetListCategory() - { - return Storage.categoryCollection; - } - - - public List GetListGoods(string category) - { - List newListGoods = new List(); - foreach (Goods g in Storage.goodsCollection) - { - if (g.Category.CategoryName == category) - { - newListGoods.Add(g); - } - } - - return newListGoods; - } - - public List GetListGoods() - { - return Storage.goodsCollection; - } - - - } -} diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsPresenter.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsPresenter.cs deleted file mode 100644 index 3b0d681..0000000 --- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsPresenter.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Domain.Entities; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ContosoUI -{ - class GoodsPresenter - - { - private IGoodsModel model; - private IGoodsView view; - - public List forLoad; - - public GoodsPresenter(IGoodsView view, IGoodsModel model) - { - this.view = view; - this.model = model; - this.view.loadGoodsForm += new EventHandler(OnGoodsFormLoad); - this.view.searchButtonClick += new EventHandler(OnSearchButtonClick); - } - - - private void OnGoodsFormLoad(object sender, EventArgs e) - { - forLoad=this.model.GetListGoods(); - } - - private void OnSearchButtonClick(object sender, EventArgs e) - { - - } - } -} diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsModel.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsModel.cs deleted file mode 100644 index 58c9002..0000000 --- a/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Domain.Entities; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - - -namespace ContosoUI -{ - interface IGoodsModel - { - List GetListCategory(); - List GetListGoods(string category); - List GetListGoods(); - } -} diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsView.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsView.cs deleted file mode 100644 index 71a0d7e..0000000 --- a/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsView.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Domain.Entities; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ContosoUI -{ - interface IGoodsView - { - void SetGoodsData(List goodsList); - - void SetGoodsCategory(List categoryList); - - event EventHandler loadGoodsForm; - - event EventHandler searchButtonClick; - } -} diff --git a/Solution/ContosoProject/ContosoUI/IUserNotify.cs b/Solution/ContosoProject/ContosoUI/IUserNotify.cs new file mode 100644 index 0000000..5966903 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/IUserNotify.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ContosoUI +{ + interface IUserNotify + { + void ShowError(string text, string header); + void ShowWarning(string text, string header); + void ShowInfo(string text, string header); + bool ShowYesNo(string text, string header); + } +} diff --git a/Solution/ContosoProject/ContosoUI/MainView.Designer.cs b/Solution/ContosoProject/ContosoUI/MainView.Designer.cs index e0404d3..2c6b90b 100644 --- a/Solution/ContosoProject/ContosoUI/MainView.Designer.cs +++ b/Solution/ContosoProject/ContosoUI/MainView.Designer.cs @@ -43,6 +43,7 @@ private void InitializeComponent() this.addGoodsBarButton = new DevExpress.XtraBars.BarButtonItem(); this.RolesButton = new DevExpress.XtraBars.BarButtonItem(); this.ChangePasswordBtn = new DevExpress.XtraBars.BarButtonItem(); + this.productCategoryButton = new DevExpress.XtraBars.BarButtonItem(); this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); this.customersMenuGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); this.ordersMenuGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); @@ -70,9 +71,10 @@ private void InitializeComponent() this.goodsMenuBtn, this.addGoodsBarButton, this.RolesButton, - this.ChangePasswordBtn}); + this.ChangePasswordBtn, + this.productCategoryButton}); this.ribbonControl.Location = new System.Drawing.Point(0, 0); - this.ribbonControl.MaxItemId = 15; + this.ribbonControl.MaxItemId = 16; this.ribbonControl.MdiMergeStyle = DevExpress.XtraBars.Ribbon.RibbonMdiMergeStyle.Always; this.ribbonControl.Name = "ribbonControl"; this.ribbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { @@ -185,6 +187,14 @@ private void InitializeComponent() this.ChangePasswordBtn.Name = "ChangePasswordBtn"; this.ChangePasswordBtn.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem1_ItemClick_1); // + // productCategoryButton + // + this.productCategoryButton.Caption = "Категории товаров"; + this.productCategoryButton.Id = 15; + this.productCategoryButton.ImageUri.Uri = "Filter"; + this.productCategoryButton.Name = "productCategoryButton"; + this.productCategoryButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.productCategoryButton_ItemClick); + // // mainRibbonPage // this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { @@ -201,6 +211,7 @@ private void InitializeComponent() // this.customersMenuGroup.ItemLinks.Add(this.customersMenuBtn); this.customersMenuGroup.ItemLinks.Add(this.addNewCustomerBtn); + this.customersMenuGroup.MergeOrder = 10; this.customersMenuGroup.Name = "customersMenuGroup"; this.customersMenuGroup.Text = "Клиенты"; // @@ -208,6 +219,7 @@ private void InitializeComponent() // this.ordersMenuGroup.ItemLinks.Add(this.ordersMenuBtn); this.ordersMenuGroup.ItemLinks.Add(this.addNewOrderBtn); + this.ordersMenuGroup.MergeOrder = 20; this.ordersMenuGroup.Name = "ordersMenuGroup"; this.ordersMenuGroup.Text = "Заказы"; // @@ -215,6 +227,8 @@ private void InitializeComponent() // this.goodsMenuGroup.ItemLinks.Add(this.goodsMenuBtn); this.goodsMenuGroup.ItemLinks.Add(this.addGoodsBarButton); + this.goodsMenuGroup.ItemLinks.Add(this.productCategoryButton); + this.goodsMenuGroup.MergeOrder = 30; this.goodsMenuGroup.Name = "goodsMenuGroup"; this.goodsMenuGroup.Text = "Товары"; // @@ -223,6 +237,7 @@ private void InitializeComponent() this.usersMenuGroup.ItemLinks.Add(this.usersMenuBtn); this.usersMenuGroup.ItemLinks.Add(this.addNewUserBtn); this.usersMenuGroup.ItemLinks.Add(this.RolesButton); + this.usersMenuGroup.MergeOrder = 40; this.usersMenuGroup.Name = "usersMenuGroup"; this.usersMenuGroup.Text = "Пользователи"; // @@ -231,6 +246,7 @@ private void InitializeComponent() this.System.ItemLinks.Add(this.logoutBtn); this.System.ItemLinks.Add(this.ChangePasswordBtn); this.System.ItemLinks.Add(this.exitBtn); + this.System.MergeOrder = 50; this.System.Name = "System"; this.System.Text = "Системные"; // @@ -240,6 +256,7 @@ private void InitializeComponent() // // MainView // + this.CausesValidation = false; this.ClientSize = new System.Drawing.Size(1028, 621); this.Controls.Add(this.ribbonControl); this.IsMdiContainer = true; @@ -274,5 +291,6 @@ private void InitializeComponent() private DevExpress.XtraBars.Ribbon.RibbonPageGroup usersMenuGroup; private DevExpress.XtraBars.BarButtonItem RolesButton; private DevExpress.XtraBars.BarButtonItem ChangePasswordBtn; + private DevExpress.XtraBars.BarButtonItem productCategoryButton; } } \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/MainView.cs b/Solution/ContosoProject/ContosoUI/MainView.cs index 6efe971..5492b0e 100644 --- a/Solution/ContosoProject/ContosoUI/MainView.cs +++ b/Solution/ContosoProject/ContosoUI/MainView.cs @@ -12,14 +12,17 @@ using ContosoUI.Customers.Add; using ContosoUI.Users.Edit; using ContosoUI.Order; +using ContosoUI.ProductCategoryList; namespace ContosoUI { - public partial class MainView : DevExpress.XtraEditors.XtraForm + public partial class MainView : DevExpress.XtraEditors.XtraForm, IUserNotify { public MainView() { InitializeComponent(); + this.Text = String.Format("[{0}] {1} {2} {3}",Program.AuthUser.Login, Program.AuthUser.PersonalInfo.LastName, + Program.AuthUser.PersonalInfo.FirstName,Program.AuthUser.PersonalInfo.MiddleName); if (!Program.AuthUser.Role.Permissions.Any(x => x.Type == Domain.PermissionType.NewUser)) { this.addNewUserBtn.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; @@ -56,6 +59,10 @@ public MainView() { this.addGoodsBarButton.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } + if (!Program.AuthUser.Role.Permissions.Any(x => x.Type == Domain.PermissionType.EditProductCategory)) + { + this.productCategoryButton.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; + } } private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) @@ -138,5 +145,34 @@ private void addGoodsBarButton_ItemClick(object sender, DevExpress.XtraBars.Item form.MdiParent = this; form.Show(); } + + private void productCategoryButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + var form = new ProductCategoryView(); + form.MdiParent = this; + form.Show(); + } +# region IUserNotify + public void ShowError(string text, string header) + { + XtraMessageBox.Show(text, header, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + public void ShowWarning(string text, string header) + { + XtraMessageBox.Show(text, header, MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + public void ShowInfo(string text, string header) + { + XtraMessageBox.Show(text, header, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + public bool ShowYesNo(string text, string header) + { + DialogResult dialog = XtraMessageBox.Show(text, header, MessageBoxButtons.YesNo, MessageBoxIcon.Information); + return dialog == DialogResult.Yes; + } +# endregion } } \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/MainView.resx b/Solution/ContosoProject/ContosoUI/MainView.resx index fb5fbe5..6d5b7ac 100644 --- a/Solution/ContosoProject/ContosoUI/MainView.resx +++ b/Solution/ContosoProject/ContosoUI/MainView.resx @@ -319,4 +319,7 @@ 17, 17 + + 25 + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderPresenter.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderPresenter.cs new file mode 100644 index 0000000..54123ec --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderPresenter.cs @@ -0,0 +1,179 @@ +using Data.EFData; +using ContosoUI.Presenter; +using Domain.Entities; +using System.Collections.Generic; +using System.Linq; + +namespace ContosoUI.Order.AddEdit +{ + public class AddEditOrderPresenter : BasePresenter + { + public AddEditOrderPresenter(AddEditOrderView view, int orderId) + { + this.view = view; + + goods.AddRange(modelProxy.GoodsModel.GetAll().Where(x => x.IsActive == true)); + + if (orderId >= 0) + { + order = modelProxy.OrderModel.GetById(orderId); + } + else + { + order = new Domain.Entities.Order(); + } + } + + readonly AddEditOrderView view; + readonly AddOrderProxy modelProxy = new AddOrderProxy(); + IUserNotify notifyManager = Program.MainWiewInstance; + Domain.Entities.Order order; + + public List GoodsListSource + { + get { return order.GoodsList.ToList(); } + } + + public List Customers + { + get { return modelProxy.CustomerModel.GetAll().Where(x => x.IsActive == true).ToList(); } + } + + public List Statuses + { + get { return modelProxy.OrderStatusModel.GetAll().Distinct().ToList(); } + } + + List goods = new List(); + public List Goods + { + get { return goods; } + } + + public List Comments + { + get { return order.Comments.ToList(); } + set + { + if (Comments != value) + { + Comments = value; + NotifyPropertyChanged("Comments"); + } + } + } + + public Customer Customer + { + get { return order.Customer; } + set + { + if (order.Customer != value) + { + order.Customer = value; + NotifyPropertyChanged("Customer"); + } + } + } + + public OrderStatus Status + { + get { return order.Status; } + set + { + if (order.Status != value) + { + order.Status = value; + NotifyPropertyChanged("Status"); + } + } + } + + private Goods selectedGood { get; set; } + public Goods SelectedGood + { + get { return selectedGood; } + set + { + if (selectedGood != value) + { + selectedGood = value; + NotifyPropertyChanged("SelectedGood"); + } + } + } + + private int countOfGood; + public int CountOfGood + { + get { return countOfGood; } + set + { + if (countOfGood != value) + { + countOfGood = value; + NotifyPropertyChanged("CountOfGood"); + } + } + } + + public double TotalCost + { + get { return order.TotalCost; } + } + + private string message; + public string Message + { + get { return message; } + set + { + if (message != value) + { + message = value; + NotifyPropertyChanged("Message"); + } + } + } + + public Comment Comment + { + get { return new Comment() { Message = message, Type = CommentType.Order }; } + } + + public void AddGoodRow() + { + GoodsRow newGoodsRow = new GoodsRow() { Goods = SelectedGood, Count = CountOfGood, Price = SelectedGood.Price }; + order.GoodsList.Add(newGoodsRow); + NotifyPropertyChanged("AddGoodRow"); + } + + public void AddComment() + { + order.Comments.Add(Comment); + message = string.Empty; + NotifyPropertyChanged("CommentsAdd"); + } + + public void Save() + { + if (order.Id > 0) + { + modelProxy.OrderModel.Update(order); + notifyManager.ShowInfo("Заказ обновлен", "Сообщение"); + } + else + { + modelProxy.OrderModel.Add(order); + notifyManager.ShowInfo("Заказ добавлен", "Сообщение"); + } + } + + public void SaveAndNew() + { + Save(); + order = new Domain.Entities.Order(); + NotifyPropertyChanged("SaveAndNew"); + } + } +} diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.Designer.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.Designer.cs new file mode 100644 index 0000000..be4153d --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.Designer.cs @@ -0,0 +1,539 @@ +namespace ContosoUI.Order +{ + partial class AddEditOrderView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddEditOrderView)); + this.mainLayoutControl = new DevExpress.XtraLayout.LayoutControl(); + this.goodsRowGridControl = new DevExpress.XtraGrid.GridControl(); + this.goodsRowBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.ordersGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.colGoods = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colCount = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colPrice = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colTotalPrice = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colId = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colIsActive1 = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn(); + this.mainRibbonControl = new DevExpress.XtraBars.Ribbon.RibbonControl(); + this.saveOrderButton = new DevExpress.XtraBars.BarButtonItem(); + this.saveAndNewOrderButton = new DevExpress.XtraBars.BarButtonItem(); + this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); + this.saveRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); + this.priceEdit = new DevExpress.XtraEditors.TextEdit(); + this.addGoodButton = new DevExpress.XtraEditors.SimpleButton(); + this.addCommentButton = new DevExpress.XtraEditors.SimpleButton(); + this.commentTextEdit = new DevExpress.XtraEditors.TextEdit(); + this.commentsListBox = new DevExpress.XtraEditors.ListBoxControl(); + this.countOfGoodTextEdit = new DevExpress.XtraEditors.TextEdit(); + this.goodsComboBox = new System.Windows.Forms.ComboBox(); + this.customerComboBox = new System.Windows.Forms.ComboBox(); + this.statusComboBox = new System.Windows.Forms.ComboBox(); + this.layoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup(); + this.goodLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.statusLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.customerLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem(); + this.commentLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem(); + this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem(); + this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem(); + this.priceLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.gridLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.layoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn(); + ((System.ComponentModel.ISupportInitialize)(this.mainLayoutControl)).BeginInit(); + this.mainLayoutControl.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.goodsRowGridControl)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodsRowBindingSource)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ordersGridView)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.mainRibbonControl)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.priceEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.commentTextEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.commentsListBox)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.countOfGoodTextEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodLayoutControlItem)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.customerLayoutControlItem)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.commentLayoutControlItem)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.priceLayoutControlItem)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gridLayoutControlItem)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem)).BeginInit(); + this.SuspendLayout(); + // + // mainLayoutControl + // + this.mainLayoutControl.Controls.Add(this.goodsRowGridControl); + this.mainLayoutControl.Controls.Add(this.priceEdit); + this.mainLayoutControl.Controls.Add(this.addGoodButton); + this.mainLayoutControl.Controls.Add(this.addCommentButton); + this.mainLayoutControl.Controls.Add(this.commentTextEdit); + this.mainLayoutControl.Controls.Add(this.commentsListBox); + this.mainLayoutControl.Controls.Add(this.countOfGoodTextEdit); + this.mainLayoutControl.Controls.Add(this.goodsComboBox); + this.mainLayoutControl.Controls.Add(this.customerComboBox); + this.mainLayoutControl.Controls.Add(this.statusComboBox); + this.mainLayoutControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.mainLayoutControl.Location = new System.Drawing.Point(0, 0); + this.mainLayoutControl.Name = "mainLayoutControl"; + this.mainLayoutControl.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(582, 363, 250, 350); + this.mainLayoutControl.Root = this.layoutControlGroup; + this.mainLayoutControl.Size = new System.Drawing.Size(784, 561); + this.mainLayoutControl.TabIndex = 0; + this.mainLayoutControl.Text = "layoutControl1"; + // + // goodsRowGridControl + // + this.goodsRowGridControl.DataSource = this.goodsRowBindingSource; + this.goodsRowGridControl.Location = new System.Drawing.Point(290, 120); + this.goodsRowGridControl.MainView = this.ordersGridView; + this.goodsRowGridControl.MenuManager = this.mainRibbonControl; + this.goodsRowGridControl.Name = "goodsRowGridControl"; + this.goodsRowGridControl.Size = new System.Drawing.Size(482, 405); + this.goodsRowGridControl.TabIndex = 20; + this.goodsRowGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.ordersGridView}); + // + // goodsRowBindingSource + // + this.goodsRowBindingSource.DataSource = typeof(Domain.Entities.GoodsRow); + // + // ordersGridView + // + this.ordersGridView.ActiveFilterEnabled = false; + this.ordersGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.colGoods, + this.colCount, + this.colPrice, + this.colTotalPrice, + this.colId, + this.colIsActive1, + this.colEditTime}); + this.ordersGridView.GridControl = this.goodsRowGridControl; + this.ordersGridView.Name = "ordersGridView"; + this.ordersGridView.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.ordersGridView_CellValueChanged); + // + // colGoods + // + this.colGoods.Caption = "Товар"; + this.colGoods.FieldName = "Goods"; + this.colGoods.Name = "colGoods"; + this.colGoods.Visible = true; + this.colGoods.VisibleIndex = 0; + // + // colCount + // + this.colCount.Caption = "Кол-во"; + this.colCount.FieldName = "Count"; + this.colCount.Name = "colCount"; + this.colCount.Visible = true; + this.colCount.VisibleIndex = 1; + // + // colPrice + // + this.colPrice.FieldName = "Price"; + this.colPrice.Name = "colPrice"; + // + // colTotalPrice + // + this.colTotalPrice.Caption = "Цена"; + this.colTotalPrice.FieldName = "TotalPrice"; + this.colTotalPrice.Name = "colTotalPrice"; + this.colTotalPrice.OptionsColumn.ReadOnly = true; + this.colTotalPrice.Visible = true; + this.colTotalPrice.VisibleIndex = 2; + // + // colId + // + this.colId.FieldName = "Id"; + this.colId.Name = "colId"; + // + // colIsActive1 + // + this.colIsActive1.Caption = "Активен"; + this.colIsActive1.FieldName = "IsActive"; + this.colIsActive1.Name = "colIsActive1"; + this.colIsActive1.Visible = true; + this.colIsActive1.VisibleIndex = 3; + // + // colEditTime + // + this.colEditTime.FieldName = "EditTime"; + this.colEditTime.Name = "colEditTime"; + // + // mainRibbonControl + // + this.mainRibbonControl.Dock = System.Windows.Forms.DockStyle.None; + this.mainRibbonControl.ExpandCollapseItem.Id = 0; + this.mainRibbonControl.Items.AddRange(new DevExpress.XtraBars.BarItem[] { + this.mainRibbonControl.ExpandCollapseItem, + this.saveOrderButton, + this.saveAndNewOrderButton}); + this.mainRibbonControl.Location = new System.Drawing.Point(0, 0); + this.mainRibbonControl.MaxItemId = 11; + this.mainRibbonControl.Name = "mainRibbonControl"; + this.mainRibbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { + this.mainRibbonPage}); + this.mainRibbonControl.Size = new System.Drawing.Size(784, 141); + // + // saveOrderButton + // + this.saveOrderButton.Caption = "Сохранить"; + this.saveOrderButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveOrderButton.Glyph"))); + this.saveOrderButton.Id = 1; + this.saveOrderButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("saveOrderButton.LargeGlyph"))); + this.saveOrderButton.Name = "saveOrderButton"; + this.saveOrderButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveOrderButton_ItemClick); + // + // saveAndNewOrderButton + // + this.saveAndNewOrderButton.Caption = "Сохранить и Добавить"; + this.saveAndNewOrderButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveAndNewOrderButton.Glyph"))); + this.saveAndNewOrderButton.Id = 2; + this.saveAndNewOrderButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("saveAndNewOrderButton.LargeGlyph"))); + this.saveAndNewOrderButton.Name = "saveAndNewOrderButton"; + this.saveAndNewOrderButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveAndNewOrderButton_ItemClick); + // + // mainRibbonPage + // + this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { + this.saveRibbonPageGroup}); + this.mainRibbonPage.Name = "mainRibbonPage"; + this.mainRibbonPage.Text = "Меню"; + // + // saveRibbonPageGroup + // + this.saveRibbonPageGroup.ItemLinks.Add(this.saveOrderButton); + this.saveRibbonPageGroup.ItemLinks.Add(this.saveAndNewOrderButton); + this.saveRibbonPageGroup.MergeOrder = 5; + this.saveRibbonPageGroup.Name = "saveRibbonPageGroup"; + this.saveRibbonPageGroup.Text = "Сохранить"; + // + // priceEdit + // + this.priceEdit.Enabled = false; + this.priceEdit.Location = new System.Drawing.Point(82, 529); + this.priceEdit.MenuManager = this.mainRibbonControl; + this.priceEdit.Name = "priceEdit"; + this.priceEdit.Properties.ReadOnly = true; + this.priceEdit.Size = new System.Drawing.Size(690, 20); + this.priceEdit.StyleController = this.mainLayoutControl; + this.priceEdit.TabIndex = 9; + // + // addGoodButton + // + this.addGoodButton.Location = new System.Drawing.Point(290, 94); + this.addGoodButton.Name = "addGoodButton"; + this.addGoodButton.Size = new System.Drawing.Size(482, 22); + this.addGoodButton.StyleController = this.mainLayoutControl; + this.addGoodButton.TabIndex = 7; + this.addGoodButton.Text = "Добавить"; + this.addGoodButton.Click += new System.EventHandler(this.addGoodButton_Click); + // + // addCommentButton + // + this.addCommentButton.Location = new System.Drawing.Point(12, 93); + this.addCommentButton.Name = "addCommentButton"; + this.addCommentButton.Size = new System.Drawing.Size(274, 22); + this.addCommentButton.StyleController = this.mainLayoutControl; + this.addCommentButton.TabIndex = 6; + this.addCommentButton.Text = "Добавить"; + this.addCommentButton.Click += new System.EventHandler(this.addCommentButton_Click); + // + // commentTextEdit + // + this.commentTextEdit.Location = new System.Drawing.Point(12, 69); + this.commentTextEdit.MenuManager = this.mainRibbonControl; + this.commentTextEdit.Name = "commentTextEdit"; + this.commentTextEdit.Size = new System.Drawing.Size(274, 20); + this.commentTextEdit.StyleController = this.mainLayoutControl; + this.commentTextEdit.TabIndex = 3; + // + // commentsListBox + // + this.commentsListBox.Location = new System.Drawing.Point(12, 120); + this.commentsListBox.Name = "commentsListBox"; + this.commentsListBox.Size = new System.Drawing.Size(274, 405); + this.commentsListBox.StyleController = this.mainLayoutControl; + this.commentsListBox.TabIndex = 8; + // + // countOfGoodTextEdit + // + this.countOfGoodTextEdit.Location = new System.Drawing.Point(679, 69); + this.countOfGoodTextEdit.MenuManager = this.mainRibbonControl; + this.countOfGoodTextEdit.Name = "countOfGoodTextEdit"; + this.countOfGoodTextEdit.Size = new System.Drawing.Size(93, 20); + this.countOfGoodTextEdit.StyleController = this.mainLayoutControl; + this.countOfGoodTextEdit.TabIndex = 5; + // + // goodsComboBox + // + this.goodsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.goodsComboBox.FormattingEnabled = true; + this.goodsComboBox.Location = new System.Drawing.Point(290, 69); + this.goodsComboBox.Name = "goodsComboBox"; + this.goodsComboBox.Size = new System.Drawing.Size(385, 21); + this.goodsComboBox.TabIndex = 4; + // + // customerComboBox + // + this.customerComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.customerComboBox.FormattingEnabled = true; + this.customerComboBox.Location = new System.Drawing.Point(290, 28); + this.customerComboBox.Name = "customerComboBox"; + this.customerComboBox.Size = new System.Drawing.Size(482, 21); + this.customerComboBox.TabIndex = 2; + // + // statusComboBox + // + this.statusComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.statusComboBox.FormattingEnabled = true; + this.statusComboBox.Location = new System.Drawing.Point(12, 28); + this.statusComboBox.Name = "statusComboBox"; + this.statusComboBox.Size = new System.Drawing.Size(274, 21); + this.statusComboBox.TabIndex = 0; + // + // layoutControlGroup + // + this.layoutControlGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True; + this.layoutControlGroup.GroupBordersVisible = false; + this.layoutControlGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { + this.goodLayoutControlItem, + this.statusLayoutControlItem, + this.customerLayoutControlItem, + this.layoutControlItem1, + this.commentLayoutControlItem, + this.layoutControlItem5, + this.layoutControlItem4, + this.layoutControlItem2, + this.priceLayoutControlItem, + this.gridLayoutControlItem}); + this.layoutControlGroup.Location = new System.Drawing.Point(0, 0); + this.layoutControlGroup.Name = "Root"; + this.layoutControlGroup.Size = new System.Drawing.Size(784, 561); + this.layoutControlGroup.TextVisible = false; + // + // goodLayoutControlItem + // + this.goodLayoutControlItem.Control = this.goodsComboBox; + this.goodLayoutControlItem.Location = new System.Drawing.Point(278, 41); + this.goodLayoutControlItem.Name = "goodLayoutControlItem"; + this.goodLayoutControlItem.Size = new System.Drawing.Size(389, 41); + this.goodLayoutControlItem.Text = "Товары"; + this.goodLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top; + this.goodLayoutControlItem.TextSize = new System.Drawing.Size(67, 13); + // + // statusLayoutControlItem + // + this.statusLayoutControlItem.Control = this.statusComboBox; + this.statusLayoutControlItem.CustomizationFormText = "Статус"; + this.statusLayoutControlItem.Location = new System.Drawing.Point(0, 0); + this.statusLayoutControlItem.Name = "statusLayoutControlItem"; + this.statusLayoutControlItem.Size = new System.Drawing.Size(278, 41); + this.statusLayoutControlItem.Text = "Статус"; + this.statusLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top; + this.statusLayoutControlItem.TextSize = new System.Drawing.Size(67, 13); + // + // customerLayoutControlItem + // + this.customerLayoutControlItem.Control = this.customerComboBox; + this.customerLayoutControlItem.Location = new System.Drawing.Point(278, 0); + this.customerLayoutControlItem.Name = "customerLayoutControlItem"; + this.customerLayoutControlItem.Size = new System.Drawing.Size(486, 41); + this.customerLayoutControlItem.Text = "Клиент"; + this.customerLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top; + this.customerLayoutControlItem.TextSize = new System.Drawing.Size(67, 13); + // + // layoutControlItem1 + // + this.layoutControlItem1.Control = this.commentsListBox; + this.layoutControlItem1.Location = new System.Drawing.Point(0, 108); + this.layoutControlItem1.Name = "layoutControlItem1"; + this.layoutControlItem1.Size = new System.Drawing.Size(278, 409); + this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0); + this.layoutControlItem1.TextVisible = false; + // + // commentLayoutControlItem + // + this.commentLayoutControlItem.Control = this.commentTextEdit; + this.commentLayoutControlItem.Location = new System.Drawing.Point(0, 41); + this.commentLayoutControlItem.Name = "commentLayoutControlItem"; + this.commentLayoutControlItem.Size = new System.Drawing.Size(278, 40); + this.commentLayoutControlItem.Text = "Комментарий"; + this.commentLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top; + this.commentLayoutControlItem.TextSize = new System.Drawing.Size(67, 13); + // + // layoutControlItem5 + // + this.layoutControlItem5.Control = this.addCommentButton; + this.layoutControlItem5.Location = new System.Drawing.Point(0, 81); + this.layoutControlItem5.Name = "layoutControlItem5"; + this.layoutControlItem5.Size = new System.Drawing.Size(278, 27); + this.layoutControlItem5.TextSize = new System.Drawing.Size(0, 0); + this.layoutControlItem5.TextVisible = false; + // + // layoutControlItem4 + // + this.layoutControlItem4.Control = this.addGoodButton; + this.layoutControlItem4.Location = new System.Drawing.Point(278, 82); + this.layoutControlItem4.MinSize = new System.Drawing.Size(82, 26); + this.layoutControlItem4.Name = "layoutControlItem4"; + this.layoutControlItem4.Size = new System.Drawing.Size(486, 26); + this.layoutControlItem4.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom; + this.layoutControlItem4.TextSize = new System.Drawing.Size(0, 0); + this.layoutControlItem4.TextVisible = false; + // + // layoutControlItem2 + // + this.layoutControlItem2.Control = this.countOfGoodTextEdit; + this.layoutControlItem2.Location = new System.Drawing.Point(667, 41); + this.layoutControlItem2.Name = "layoutControlItem2"; + this.layoutControlItem2.Size = new System.Drawing.Size(97, 41); + this.layoutControlItem2.Text = "Кол-во"; + this.layoutControlItem2.TextLocation = DevExpress.Utils.Locations.Top; + this.layoutControlItem2.TextSize = new System.Drawing.Size(67, 13); + // + // priceLayoutControlItem + // + this.priceLayoutControlItem.Control = this.priceEdit; + this.priceLayoutControlItem.Location = new System.Drawing.Point(0, 517); + this.priceLayoutControlItem.Name = "priceLayoutControlItem"; + this.priceLayoutControlItem.Size = new System.Drawing.Size(764, 24); + this.priceLayoutControlItem.Text = "Цена заказа"; + this.priceLayoutControlItem.TextSize = new System.Drawing.Size(67, 13); + // + // gridLayoutControlItem + // + this.gridLayoutControlItem.Control = this.goodsRowGridControl; + this.gridLayoutControlItem.Location = new System.Drawing.Point(278, 108); + this.gridLayoutControlItem.Name = "gridLayoutControlItem"; + this.gridLayoutControlItem.Size = new System.Drawing.Size(486, 409); + this.gridLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top; + this.gridLayoutControlItem.TextSize = new System.Drawing.Size(0, 0); + this.gridLayoutControlItem.TextVisible = false; + // + // layoutControlItem + // + this.layoutControlItem.Location = new System.Drawing.Point(382, 120); + this.layoutControlItem.Name = "layoutControlItem7"; + this.layoutControlItem.Size = new System.Drawing.Size(382, 281); + this.layoutControlItem.TextSize = new System.Drawing.Size(50, 20); + // + // colIsActive + // + this.colIsActive.Caption = "Активен"; + this.colIsActive.FieldName = "IsActive"; + this.colIsActive.Name = "colIsActive"; + this.colIsActive.Visible = true; + this.colIsActive.VisibleIndex = 1; + // + // AddEditOrderView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 561); + this.Controls.Add(this.mainLayoutControl); + this.Controls.Add(this.mainRibbonControl); + this.Name = "AddEditOrderView"; + this.Text = "Добавить/Редактировать заказ"; + this.Load += new System.EventHandler(this.AddEditOrderView_Load); + ((System.ComponentModel.ISupportInitialize)(this.mainLayoutControl)).EndInit(); + this.mainLayoutControl.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.goodsRowGridControl)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodsRowBindingSource)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ordersGridView)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.mainRibbonControl)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.priceEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.commentTextEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.commentsListBox)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.countOfGoodTextEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.goodLayoutControlItem)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.customerLayoutControlItem)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.commentLayoutControlItem)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.priceLayoutControlItem)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gridLayoutControlItem)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevExpress.XtraLayout.LayoutControl mainLayoutControl; + private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup; + private DevExpress.XtraLayout.LayoutControlItem layoutControlItem; + private DevExpress.XtraBars.Ribbon.RibbonControl mainRibbonControl; + private DevExpress.XtraBars.BarButtonItem saveOrderButton; + private DevExpress.XtraBars.BarButtonItem saveAndNewOrderButton; + private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage; + private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveRibbonPageGroup; + private System.Windows.Forms.ComboBox customerComboBox; + private DevExpress.XtraLayout.LayoutControlItem customerLayoutControlItem; + private System.Windows.Forms.ComboBox statusComboBox; + private DevExpress.XtraLayout.LayoutControlItem statusLayoutControlItem; + private DevExpress.XtraEditors.TextEdit countOfGoodTextEdit; + private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2; + private DevExpress.XtraEditors.SimpleButton addGoodButton; + private DevExpress.XtraEditors.SimpleButton addCommentButton; + private DevExpress.XtraEditors.TextEdit commentTextEdit; + private DevExpress.XtraEditors.ListBoxControl commentsListBox; + private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1; + private DevExpress.XtraLayout.LayoutControlItem commentLayoutControlItem; + private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5; + private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4; + private System.Windows.Forms.ComboBox goodsComboBox; + private DevExpress.XtraLayout.LayoutControlItem goodLayoutControlItem; + private DevExpress.XtraGrid.Columns.GridColumn colIsActive; + private DevExpress.XtraGrid.GridControl goodsRowGridControl; + private DevExpress.XtraGrid.Views.Grid.GridView ordersGridView; + private DevExpress.XtraLayout.LayoutControlItem gridLayoutControlItem; + private DevExpress.XtraEditors.TextEdit priceEdit; + private DevExpress.XtraLayout.LayoutControlItem priceLayoutControlItem; + private System.Windows.Forms.BindingSource goodsRowBindingSource; + private DevExpress.XtraGrid.Columns.GridColumn colGoods; + private DevExpress.XtraGrid.Columns.GridColumn colCount; + private DevExpress.XtraGrid.Columns.GridColumn colPrice; + private DevExpress.XtraGrid.Columns.GridColumn colTotalPrice; + private DevExpress.XtraGrid.Columns.GridColumn colId; + private DevExpress.XtraGrid.Columns.GridColumn colIsActive1; + private DevExpress.XtraGrid.Columns.GridColumn colEditTime; + } +} \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.cs new file mode 100644 index 0000000..b5f97ca --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.cs @@ -0,0 +1,99 @@ +using System; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using ContosoUI.Order.AddEdit; +using DevExpress.XtraGrid.Views.Grid; +using Domain.Entities; + +namespace ContosoUI.Order +{ + public partial class AddEditOrderView : XtraForm + { + AddEditOrderPresenter presenter; + IUserNotify notifyManager = Program.MainWiewInstance; + BindingSource bindings; + + public AddEditOrderView(int id = -1) + { + InitializeComponent(); + presenter = new AddEditOrderPresenter(this, id); + } + + private void AddEditOrderView_Load(object sender, EventArgs e) + { + bindings = new BindingSource(); + bindings.DataSource = presenter; + + customerComboBox.DataBindings.Clear(); + customerComboBox.DataBindings.Add("DataSource", bindings, "Customers"); + customerComboBox.DataBindings.Add("SelectedItem", bindings, "Customer"); + + priceEdit.DataBindings.Add("EditValue", bindings, "TotalCost"); + + statusComboBox.DataBindings.Clear(); + statusComboBox.DataBindings.Add("DataSource", bindings, "Statuses"); + statusComboBox.DataBindings.Add("SelectedItem", bindings, "Status"); + + goodsComboBox.DataBindings.Add("DataSource", bindings, "Goods"); + + commentsListBox.DataBindings.Add("DataSource", bindings, "Comments"); + + commentTextEdit.DataBindings.Add("EditValue", bindings, "Message"); + + goodsRowGridControl.DataBindings.Add("DataSource", bindings, "GoodsListSource"); + goodsComboBox.DataBindings.Add("SelectedItem", bindings, "SelectedGood"); + + countOfGoodTextEdit.DataBindings.Add("EditValue", bindings, "CountOfGood"); + + } + + private void addCommentButton_Click(object sender, EventArgs e) + { + bindings.EndEdit(); + presenter.AddComment(); + } + + private void addGoodButton_Click(object sender, EventArgs e) + { + bindings.EndEdit(); + + if (ValidateCount()) + { + presenter.AddGoodRow(); + priceEdit.Text = Convert.ToString(presenter.TotalCost); + } + else + { + notifyManager.ShowInfo("Некорректное кол-во товаров", "Сообщение"); + } + + goodsRowGridControl.RefreshDataSource(); + } + + private void saveOrderButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + bindings.EndEdit(); + presenter.Save(); + } + + private void saveAndNewOrderButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + bindings.EndEdit(); + presenter.SaveAndNew(); + goodsRowGridControl.RefreshDataSource(); + } + + private void ordersGridView_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) + { + priceEdit.Text = Convert.ToString(presenter.TotalCost); + } + + private bool ValidateCount() + { + int temp; + int.TryParse(countOfGoodTextEdit.Text, out temp); + + return temp > 0 && temp < int.MaxValue; + } + } +} \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.resx b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.resx new file mode 100644 index 0000000..4093204 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.resx @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 + bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM + r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd + EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ + ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 + 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt + kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi + T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA + rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS + KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi + 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW + ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF + 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd + /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf + AAAAAElFTkSuQmCC + + + + + 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 + rkJggg== + + + + + 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 + yid5+T/OWngYNBFkcAAAAABJRU5ErkJggg== + + + + True + + + 49 + + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.Designer.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.Designer.cs deleted file mode 100644 index 4fdda83..0000000 --- a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.Designer.cs +++ /dev/null @@ -1,402 +0,0 @@ -namespace ContosoUI.Order -{ - partial class AddEditOrderView - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddEditOrderView)); - this.mainLayoutControl = new DevExpress.XtraLayout.LayoutControl(); - this.commentsListBoxControl = new DevExpress.XtraEditors.ListBoxControl(); - this.goodsListBoxControl = new DevExpress.XtraEditors.ListBoxControl(); - this.statusComboBoxEdit = new DevExpress.XtraEditors.ComboBoxEdit(); - this.mainRibbonControl = new DevExpress.XtraBars.Ribbon.RibbonControl(); - this.saveOrderButton = new DevExpress.XtraBars.BarButtonItem(); - this.saveAndNewOrderButton = new DevExpress.XtraBars.BarButtonItem(); - this.addGoodButton = new DevExpress.XtraBars.BarButtonItem(); - this.addCommentButton = new DevExpress.XtraBars.BarButtonItem(); - this.barButtonItem1 = new DevExpress.XtraBars.BarButtonItem(); - this.barButtonItem2 = new DevExpress.XtraBars.BarButtonItem(); - this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); - this.addGroupPage = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); - this.deleteRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); - this.ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); - this.commentTextEdit = new DevExpress.XtraEditors.TextEdit(); - this.totalCostTextEdit = new DevExpress.XtraEditors.TextEdit(); - this.customerComboBoxEdit = new DevExpress.XtraEditors.ComboBoxEdit(); - this.goodComboBoxEdit = new DevExpress.XtraEditors.ComboBoxEdit(); - this.layoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup(); - this.goodLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.customerLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.totalCostlayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.commenLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.statusLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem(); - ((System.ComponentModel.ISupportInitialize)(this.mainLayoutControl)).BeginInit(); - this.mainLayoutControl.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.commentsListBoxControl)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.goodsListBoxControl)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.statusComboBoxEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.mainRibbonControl)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.commentTextEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.totalCostTextEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.customerComboBoxEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.goodComboBoxEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.goodLayoutControlItem)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.customerLayoutControlItem)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.totalCostlayoutControlItem)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.commenLayoutControlItem)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).BeginInit(); - this.SuspendLayout(); - // - // mainLayoutControl - // - this.mainLayoutControl.Controls.Add(this.commentsListBoxControl); - this.mainLayoutControl.Controls.Add(this.goodsListBoxControl); - this.mainLayoutControl.Controls.Add(this.statusComboBoxEdit); - this.mainLayoutControl.Controls.Add(this.commentTextEdit); - this.mainLayoutControl.Controls.Add(this.totalCostTextEdit); - this.mainLayoutControl.Controls.Add(this.customerComboBoxEdit); - this.mainLayoutControl.Controls.Add(this.goodComboBoxEdit); - this.mainLayoutControl.Dock = System.Windows.Forms.DockStyle.Bottom; - this.mainLayoutControl.Location = new System.Drawing.Point(0, 140); - this.mainLayoutControl.Name = "mainLayoutControl"; - this.mainLayoutControl.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(878, 363, 250, 350); - this.mainLayoutControl.Root = this.layoutControlGroup; - this.mainLayoutControl.Size = new System.Drawing.Size(784, 421); - this.mainLayoutControl.TabIndex = 0; - this.mainLayoutControl.Text = "layoutControl1"; - // - // commentsListBoxControl - // - this.commentsListBoxControl.Location = new System.Drawing.Point(394, 132); - this.commentsListBoxControl.Name = "commentsListBoxControl"; - this.commentsListBoxControl.Size = new System.Drawing.Size(378, 277); - this.commentsListBoxControl.StyleController = this.mainLayoutControl; - this.commentsListBoxControl.TabIndex = 0; - // - // goodsListBoxControl - // - this.goodsListBoxControl.Location = new System.Drawing.Point(12, 132); - this.goodsListBoxControl.Name = "goodsListBoxControl"; - this.goodsListBoxControl.Size = new System.Drawing.Size(760, 277); - this.goodsListBoxControl.StyleController = this.mainLayoutControl; - this.goodsListBoxControl.TabIndex = 9; - // - // statusComboBoxEdit - // - this.statusComboBoxEdit.Location = new System.Drawing.Point(82, 36); - this.statusComboBoxEdit.MenuManager = this.mainRibbonControl; - this.statusComboBoxEdit.Name = "statusComboBoxEdit"; - this.statusComboBoxEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.statusComboBoxEdit.Size = new System.Drawing.Size(690, 20); - this.statusComboBoxEdit.StyleController = this.mainLayoutControl; - this.statusComboBoxEdit.TabIndex = 8; - // - // mainRibbonControl - // - this.mainRibbonControl.ExpandCollapseItem.Id = 0; - this.mainRibbonControl.Items.AddRange(new DevExpress.XtraBars.BarItem[] { - this.mainRibbonControl.ExpandCollapseItem, - this.saveOrderButton, - this.saveAndNewOrderButton, - this.addGoodButton, - this.addCommentButton, - this.barButtonItem1, - this.barButtonItem2}); - this.mainRibbonControl.Location = new System.Drawing.Point(0, 0); - this.mainRibbonControl.MaxItemId = 7; - this.mainRibbonControl.Name = "mainRibbonControl"; - this.mainRibbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { - this.mainRibbonPage}); - this.mainRibbonControl.Size = new System.Drawing.Size(784, 141); - // - // saveOrderButton - // - this.saveOrderButton.Caption = "Сохранить"; - this.saveOrderButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveOrderButton.Glyph"))); - this.saveOrderButton.Id = 1; - this.saveOrderButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("saveOrderButton.LargeGlyph"))); - this.saveOrderButton.Name = "saveOrderButton"; - // - // saveAndNewOrderButton - // - this.saveAndNewOrderButton.Caption = "Сохранить и Добавить"; - this.saveAndNewOrderButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveAndNewOrderButton.Glyph"))); - this.saveAndNewOrderButton.Id = 2; - this.saveAndNewOrderButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("saveAndNewOrderButton.LargeGlyph"))); - this.saveAndNewOrderButton.Name = "saveAndNewOrderButton"; - // - // addGoodButton - // - this.addGoodButton.Caption = "Добавить товар"; - this.addGoodButton.Glyph = ((System.Drawing.Image)(resources.GetObject("addGoodButton.Glyph"))); - this.addGoodButton.Id = 3; - this.addGoodButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("addGoodButton.LargeGlyph"))); - this.addGoodButton.Name = "addGoodButton"; - // - // addCommentButton - // - this.addCommentButton.Caption = "Добавить комментарий"; - this.addCommentButton.Glyph = ((System.Drawing.Image)(resources.GetObject("addCommentButton.Glyph"))); - this.addCommentButton.Id = 4; - this.addCommentButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("addCommentButton.LargeGlyph"))); - this.addCommentButton.Name = "addCommentButton"; - // - // barButtonItem1 - // - this.barButtonItem1.Caption = "Удалить товар"; - this.barButtonItem1.Glyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem1.Glyph"))); - this.barButtonItem1.Id = 5; - this.barButtonItem1.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem1.LargeGlyph"))); - this.barButtonItem1.Name = "barButtonItem1"; - // - // barButtonItem2 - // - this.barButtonItem2.Caption = "Удалить комментарий"; - this.barButtonItem2.Glyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem2.Glyph"))); - this.barButtonItem2.Id = 6; - this.barButtonItem2.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem2.LargeGlyph"))); - this.barButtonItem2.Name = "barButtonItem2"; - // - // mainRibbonPage - // - this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { - this.addGroupPage, - this.deleteRibbonPageGroup, - this.ribbonPageGroup1}); - this.mainRibbonPage.Name = "mainRibbonPage"; - this.mainRibbonPage.Text = "Главная"; - // - // addGroupPage - // - this.addGroupPage.ItemLinks.Add(this.addGoodButton); - this.addGroupPage.ItemLinks.Add(this.addCommentButton); - this.addGroupPage.MergeOrder = 10; - this.addGroupPage.Name = "addGroupPage"; - this.addGroupPage.Text = "Добавить"; - // - // deleteRibbonPageGroup - // - this.deleteRibbonPageGroup.ItemLinks.Add(this.barButtonItem1); - this.deleteRibbonPageGroup.ItemLinks.Add(this.barButtonItem2); - this.deleteRibbonPageGroup.MergeOrder = 20; - this.deleteRibbonPageGroup.Name = "deleteRibbonPageGroup"; - this.deleteRibbonPageGroup.Text = "Удалить"; - // - // ribbonPageGroup1 - // - this.ribbonPageGroup1.ItemLinks.Add(this.saveOrderButton); - this.ribbonPageGroup1.ItemLinks.Add(this.saveAndNewOrderButton); - this.ribbonPageGroup1.MergeOrder = 30; - this.ribbonPageGroup1.Name = "ribbonPageGroup1"; - this.ribbonPageGroup1.Text = "Сохранить"; - // - // commentTextEdit - // - this.commentTextEdit.Location = new System.Drawing.Point(82, 84); - this.commentTextEdit.MenuManager = this.mainRibbonControl; - this.commentTextEdit.Name = "commentTextEdit"; - this.commentTextEdit.Size = new System.Drawing.Size(690, 20); - this.commentTextEdit.StyleController = this.mainLayoutControl; - this.commentTextEdit.TabIndex = 7; - // - // totalCostTextEdit - // - this.totalCostTextEdit.Location = new System.Drawing.Point(82, 60); - this.totalCostTextEdit.MenuManager = this.mainRibbonControl; - this.totalCostTextEdit.Name = "totalCostTextEdit"; - this.totalCostTextEdit.Size = new System.Drawing.Size(690, 20); - this.totalCostTextEdit.StyleController = this.mainLayoutControl; - this.totalCostTextEdit.TabIndex = 6; - // - // customerComboBoxEdit - // - this.customerComboBoxEdit.Location = new System.Drawing.Point(82, 12); - this.customerComboBoxEdit.MenuManager = this.mainRibbonControl; - this.customerComboBoxEdit.Name = "customerComboBoxEdit"; - this.customerComboBoxEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.customerComboBoxEdit.Size = new System.Drawing.Size(690, 20); - this.customerComboBoxEdit.StyleController = this.mainLayoutControl; - this.customerComboBoxEdit.TabIndex = 5; - // - // goodComboBoxEdit - // - this.goodComboBoxEdit.Location = new System.Drawing.Point(82, 108); - this.goodComboBoxEdit.MenuManager = this.mainRibbonControl; - this.goodComboBoxEdit.Name = "goodComboBoxEdit"; - this.goodComboBoxEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.goodComboBoxEdit.Size = new System.Drawing.Size(690, 20); - this.goodComboBoxEdit.StyleController = this.mainLayoutControl; - this.goodComboBoxEdit.TabIndex = 4; - // - // layoutControlGroup - // - this.layoutControlGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True; - this.layoutControlGroup.GroupBordersVisible = false; - this.layoutControlGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { - this.goodLayoutControlItem, - this.customerLayoutControlItem, - this.totalCostlayoutControlItem, - this.commenLayoutControlItem, - this.layoutControlItem, - this.statusLayoutControlItem}); - this.layoutControlGroup.Location = new System.Drawing.Point(0, 0); - this.layoutControlGroup.Name = "Root"; - this.layoutControlGroup.Size = new System.Drawing.Size(784, 421); - this.layoutControlGroup.TextVisible = false; - // - // goodLayoutControlItem - // - this.goodLayoutControlItem.Control = this.goodComboBoxEdit; - this.goodLayoutControlItem.Location = new System.Drawing.Point(0, 96); - this.goodLayoutControlItem.Name = "goodLayoutControlItem"; - this.goodLayoutControlItem.Size = new System.Drawing.Size(764, 24); - this.goodLayoutControlItem.Text = "Товар"; - this.goodLayoutControlItem.TextSize = new System.Drawing.Size(67, 13); - // - // customerLayoutControlItem - // - this.customerLayoutControlItem.Control = this.customerComboBoxEdit; - this.customerLayoutControlItem.Location = new System.Drawing.Point(0, 0); - this.customerLayoutControlItem.Name = "customerLayoutControlItem"; - this.customerLayoutControlItem.Size = new System.Drawing.Size(764, 24); - this.customerLayoutControlItem.Text = "Клиент"; - this.customerLayoutControlItem.TextSize = new System.Drawing.Size(67, 13); - // - // totalCostlayoutControlItem - // - this.totalCostlayoutControlItem.Control = this.totalCostTextEdit; - this.totalCostlayoutControlItem.Location = new System.Drawing.Point(0, 48); - this.totalCostlayoutControlItem.Name = "totalCostlayoutControlItem"; - this.totalCostlayoutControlItem.Size = new System.Drawing.Size(764, 24); - this.totalCostlayoutControlItem.Text = "Цена"; - this.totalCostlayoutControlItem.TextSize = new System.Drawing.Size(67, 13); - // - // commenLayoutControlItem - // - this.commenLayoutControlItem.Control = this.commentTextEdit; - this.commenLayoutControlItem.Location = new System.Drawing.Point(0, 72); - this.commenLayoutControlItem.Name = "commenLayoutControlItem"; - this.commenLayoutControlItem.Size = new System.Drawing.Size(764, 24); - this.commenLayoutControlItem.Text = "Комментарий"; - this.commenLayoutControlItem.TextSize = new System.Drawing.Size(67, 13); - // - // layoutControlItem - // - this.layoutControlItem.Control = this.goodsListBoxControl; - this.layoutControlItem.Location = new System.Drawing.Point(0, 120); - this.layoutControlItem.Name = "layoutControlItem"; - this.layoutControlItem.Size = new System.Drawing.Size(764, 281); - this.layoutControlItem.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem.TextVisible = false; - // - // statusLayoutControlItem - // - this.statusLayoutControlItem.Control = this.statusComboBoxEdit; - this.statusLayoutControlItem.Location = new System.Drawing.Point(0, 24); - this.statusLayoutControlItem.Name = "statusLayoutControlItem"; - this.statusLayoutControlItem.Size = new System.Drawing.Size(764, 24); - this.statusLayoutControlItem.Text = "Статус"; - this.statusLayoutControlItem.TextSize = new System.Drawing.Size(67, 13); - // - // layoutControlItem7 - // - this.layoutControlItem7.Location = new System.Drawing.Point(382, 120); - this.layoutControlItem7.Name = "layoutControlItem7"; - this.layoutControlItem7.Size = new System.Drawing.Size(382, 281); - this.layoutControlItem7.TextSize = new System.Drawing.Size(50, 20); - // - // AddEditOrderView - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(784, 561); - this.Controls.Add(this.mainRibbonControl); - this.Controls.Add(this.mainLayoutControl); - this.Name = "AddEditOrderView"; - this.Text = "Добавить/Редактировать заказ"; - ((System.ComponentModel.ISupportInitialize)(this.mainLayoutControl)).EndInit(); - this.mainLayoutControl.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.commentsListBoxControl)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.goodsListBoxControl)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.statusComboBoxEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.mainRibbonControl)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.commentTextEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.totalCostTextEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.customerComboBoxEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.goodComboBoxEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.goodLayoutControlItem)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.customerLayoutControlItem)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.totalCostlayoutControlItem)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.commenLayoutControlItem)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private DevExpress.XtraLayout.LayoutControl mainLayoutControl; - private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup; - private DevExpress.XtraBars.Ribbon.RibbonControl mainRibbonControl; - private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage; - private DevExpress.XtraBars.Ribbon.RibbonPageGroup addGroupPage; - private DevExpress.XtraEditors.ComboBoxEdit goodComboBoxEdit; - private DevExpress.XtraLayout.LayoutControlItem goodLayoutControlItem; - private DevExpress.XtraEditors.TextEdit totalCostTextEdit; - private DevExpress.XtraEditors.ComboBoxEdit customerComboBoxEdit; - private DevExpress.XtraLayout.LayoutControlItem customerLayoutControlItem; - private DevExpress.XtraLayout.LayoutControlItem totalCostlayoutControlItem; - private DevExpress.XtraEditors.TextEdit commentTextEdit; - private DevExpress.XtraLayout.LayoutControlItem commenLayoutControlItem; - private DevExpress.XtraEditors.ComboBoxEdit statusComboBoxEdit; - private DevExpress.XtraLayout.LayoutControlItem statusLayoutControlItem; - private DevExpress.XtraEditors.ListBoxControl commentsListBoxControl; - private DevExpress.XtraEditors.ListBoxControl goodsListBoxControl; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7; - private DevExpress.XtraBars.BarButtonItem saveOrderButton; - private DevExpress.XtraBars.BarButtonItem saveAndNewOrderButton; - private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1; - private DevExpress.XtraBars.BarButtonItem addGoodButton; - private DevExpress.XtraBars.BarButtonItem addCommentButton; - private DevExpress.XtraBars.BarButtonItem barButtonItem1; - private DevExpress.XtraBars.BarButtonItem barButtonItem2; - private DevExpress.XtraBars.Ribbon.RibbonPageGroup deleteRibbonPageGroup; - } -} \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.cs deleted file mode 100644 index 57f7888..0000000 --- a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Linq; -using System.Threading.Tasks; -using System.Windows.Forms; -using DevExpress.XtraEditors; - -namespace ContosoUI.Order -{ - public partial class AddEditOrderView : DevExpress.XtraEditors.XtraForm - { - public AddEditOrderView() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.resx b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.resx deleted file mode 100644 index ff71b62..0000000 --- a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.resx +++ /dev/null @@ -1,495 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM - r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd - EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ - ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 - 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt - kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi - T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA - rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS - KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi - 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW - ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF - 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd - /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAJQElEQVRYR8WWd1TUVxbH3ZItycYkpm39d/+Ku1FRikjvvQ0ww9AZGJgBBhh6 - GRh6R6RIQEWxIGKkKKLYgsEaY8EuKEWRCCrShKjnu/f9hiEhuMecPSdn3zkfHo+Zw/d77yv3LgHwf+Wn - 41fEr/9HfvMzUH+X6Swa7IO3iN8Tf/wJb7+Bd34m7Lvs/zMzC0ywxVth6Vsy5Hk7X0YX1COmcDfiiuvB - F6fD1iMGtoIYeIhSkV+2G7ml9cgu2YHMou1QFmxDal4tUrI3IzGjBnHKKsQoNiIqqQwWjsFw8pbD0UsO - B49I2PFlL614kh2kxUywgOcHW/whInfHbNPxK2g50Y3mzm60dV2Hpp4HjCw8YeMcDM8gJZ5NzWKMeDqp - 4snEDB6Pz2B0/DlGnql4NDaN755Mw8w+EFV1+1FZ24ryTc3YUNMEW7fwl6TFssGyMD/Y4u3w7Do0HbuM - 3E3tyN7cjpK6o3MGhLBxCoYwMJUTvNr/BN19j3Hl3mNcvjuKS70jWKllTlhipTZB8/2RCRjbiiCNKYE4 - qhCBEXlIpixZu4ayk/funOb8YIt3wtK3ofHIRWRVtxEHULytA2v0BDA0F8LaSQx+QAoX3cWeEXzb8wgX - 7jzCN7e/w/lbw1ilY40Vmk4k7gx72q67Q89gaOWHkLgiBEXlQRSRi/jMarWBpcRvmbB6MAN/kio3o+Hw - BaRXtSKjaj8Kt3Zg9To+DOYMuPkm48HoJM7dHMbZG8M4c/0hTl8bwqmrQ9DQtYPGWh4ZdoetezRuDTyB - noUPQmKKERhJBsJzEZteBSsXKTPwHrHYgERRg11t55BW0QJlZQsKtrRjtS4ZMPOAlWMgeN6J6BseR1f3 - A3zdfR+dlwfx1aVBnLg4QMJO0DH0wFpjL4oyCldpW3TNvBAsL6LocxAQloXo1ApYOEuYgfeJRQbeDUmu - Rt3+M1CUfYnUsn3I33yQInOHPhmwdBDB2TMed+4/xYlv+3H8Qj+OEh3n+9Bx7h60DHjQN/eFkbUIFrwI - XLj5EDrGHhDLC+AXng2f0GxEppTDnG4Gab3WwNKghErUNnUhqaQRyaV7kVPTSml1g56pABb2IrpKsbh2 - bwQdZ+/iENF+phcHT/ei7VQPtA3dYeEig7mzDGZO4ThNGdIy5NMBzIdfaCa8JZmQJW6AmaOYGfiAWGCA - LZYGxJZj095OJNIbkFjcgKyqFjpcrlhnwoe5XQDd42hcuj2MA109OPD1HbQyTt5GC9HceQunrgyi6/IA - Tl4aQOfFfmjqu3H77yXNhFdIOsLii2FCV5O0ls1pzg+2eM9PXoKN9ccRm7cT8fm7kFnZBEuXMKzQdsEK - LRfomfnAyCoABlb+0Lfwha65N3RNvbDWRAhtSre2oQCaFPUafXc6E67cNQyg/fckcaFYSQeyEEY2IrUB - 9urOD2bgfS9ZIcq2d0CevR3ynO1QlDZAWd6I9LK9UDI2NNLM1o1I27AHSvo8taQBEakbIYkpQkh0IcQM - 2vcgunYiWQ586fAJg9LApzckKDKfM09aHxKLDXhI87B+y0FEZNSqyKxF1BxyNmcxts7/Ls/cgghlDXwo - Qh9JOrxpZtF6BjOU8BCnQcDERQrw/RV0E3JgYOnHDHxELDLwgXtwFgqqWxGetglhCoJm9ruMzUqa1aTV - ENX0txoE0CsnnBNkaWbRenARkygJuwcQ/slw80uGb2gWvQ2+PzYwX5CYgWUugenIrmiCJLEKkuQvIEn5 - AlI2J1dBmkJ/I9gcmrJRtU6sIDElBEyMUsxEBSzaOWEmyvNLAs83CS4+CXQQldzbQFofEwsMsMUyJ98U - KNfvQVBsBYISyiGOL4cX3V8PikxAEQrYzKWVxIIU9I8T4OgZTdeTVbsoeoIjYc9nVS8CNm4ymiPB80nk - xJ284rnM6Bh7MgOfzGkuMPChnWciFIU7ESDfwCGSr+eimn3xEjOzKp4T07MvMDXzEhPTsxinysgq5DOq - jGOTM3hKVfExg6qihZOUhOPIZCwcBLHcOdA2EqoN/I5YaMCaH4O4nG3wlRURxfCjmaWPCU8+f0F8/4Mo - K8VUhpnQ6BhjGiPEo6dTXCkefjJJ5TiYe7zs+bHcG+JK2dA04DMDnxKLDHxkSW94NBUkoSSfUp8HT2k+ - nH3iuagnSLz52C18eeQm9hy+hk2NF1C56zxK686guPYU8qtPIrvyBNJLj5L4FIYfT8LYJpATtnWX05bI - 4SyMp+Lmxgz8mZg3wH4wAx+bOYcjnA6cICibOiEVDsJoTM+8wPj095RqBjUiE7PzaVZFrY6cCROjUxgi - AwaW/rChoGx4UbB2ofNB26CxzvW/GzCyl1L9LodrQAbcROk0UzvmHokpin6cxHe3X8PO/VdQVf8NSref - RQmLvEYd+TEoig8jsaCdEx+isr2OXk4mbE31wcJJRt1QNFbquDADfyEWGfhEz1qMwKj1cPZN43DxVcCK - F8alf4y1YCxy6ojYnrPIR7jIWfulivwhg4SHRibxgNCm0syEGeaO4bDmRWKFjtNrDbDFp7oWgfAPK6BT - mwwHhjAJ5nSSWfRjJP50fBajXNp/6Ps4ceIhRc2Jj05w4qwl09IXwMwhnAiDqX0Y9QIR+FyLM/BXgjWm - Cw1om/rRi5ZNBycedgIVJnZiVHT2I+dQDzLa7iCx+Qbi991AzN7riG68jsiG65DVX0PYzquQ7LiK4Lpu - BG3rRuDWbjpw7lT9QmFqFwoTWynMyci/1zgyA38jFhvQNPamlyydTmwsrN1iOAypwdh45hEKTgwh88gD - pB0aRMrBASQdGED8/n7EtvQhuqkPkfvuQdZ4F+GEtKEXkt091KDy6CZIYETiRjSbkpnlaxxea4C7hmsM - PF+5+adSCZbDyjkKloQedTllXcPIPaYSV7QPIrltEAlkIK6lH9HNfYgi8Yi9KvHQPb2cgZD6Xq5JZcJq - jG0l+Gy1/QvSWvAOsB9cR7Rc06FolR7/lQY1oiupFWNo0j56FnbBNesrOKYdhW1yB6wTDsEi9iBM5Adg - GNGKdaFN0JHsg6a4EatFe7DKfzc+99mF5RoO+EzDnmO5ilf//JdJPmmpWzLOABvsF+aItcvsmWSHhKXp - Tfz9DfzjR7A1u/9MfD796sEW6kyw7WBf+CVgQaojX2BAPdQf/NLMjSVL/gMGC1sK0EICNQAAAABJRU5E - rkJggg== - - - - - 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 - yid5+T/OWngYNBFkcAAAAABJRU5ErkJggg== - - - - - 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 - SUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACN0RVh0VGl0 - bGUAQWRkO0ZpbGU7QWRkRmlsZTtCYXJzO1JpYmJvbjsV3KoKAAADJElEQVQ4T02TaUhUURiGr2tqFkUF - /fFHOLbaRgtTFFqhWaE1KhFlppHiMla2KIrlWi5NTo6OuYJaQaWSUhnZItnmaFoUgaH5ozQxLXNWvTPj - 23fOJHTguR/33Ps+9zvn3ivQsCuo6nx+paoTjIIqDfIrNSgg8io6iQ7klmuQW/YWl8s6kFP6so0y9gAE - Bhv2+RUaTNMZhw42pjnWGaw2sopfsZTD/wKHS+Vvecg0aYGRMJhs6I1mjs5ogZYQLVakK9tZyvF/gSOz - MoHeZAvYQmYuM5LINEXCSTNEswW5at6BU1a9v8Bgwyld+YK3qzOK0BlEEokY/j2E5s5rUD44AroRhVSb - NYVofqZhAheL1SBk3PHjAudURRtf58S/p3/+psGlxv141FOM72MfYbboeG3pViHzdiDirm6RUc4+7eYu - LpiVnPeUC/7ozfgxNoicu0HoG+6AaP0NdVMqzpUeRMm9c9BOfUHv0HOk1OzQRmZu9KKsHRO4JmY/hoV2 - WEvt321X4GFXCQziN4wYXiOxOAS9A2M4rQrB1z/1GJhoQuObHMiLtlZQ1pEJ3OTpLVwwoZvEhZr96B1p - huKOHCeVwUgg2L7IqcYXypB9KxxP+pMQp5QOU3YWE8yOTbtP6ySBfhIJqm14N5KJOMUBfOr7iXGSjuum - eGUjJj8INz774ET+JpGyLkzgHp3SBLPZinGtiVregyd9ciRV+yMqLxBRuYEYnTAi6nIgThBnK/2g6tiA - sIx1rAMumHs8uYnesRWj40aUNmag+GEoqj5uhrpnDY5n7+VPjszci9IP3lC/90bq7fU4cGZlLWWdueDY - 2UZMkUCrFzEw2I+ILCmuv/SFqns5EtS+OHoxAPISHxR1L0VO6zKEJK0ySGUeaynrwARuh2Lr2sNO1+Pw - qXooKtpRVFuH0PPrkFi9GlmtEhR2eVL1RHyZF2SJ3lZpsEcY5Zz3yZeyvGDPJMQ8Yj6xgFi8TLrQZ2fE - koaAGMlYQJwX/GMkv3zDlzSs2L5oC113Jex2x0gE/kPMsDtWIvBJ2wfC2mOb5E7MJeb8O2fzdn7RnoJf - tKfwF7guZQwBlVFoAAAAAElFTkSuQmCC - - - - - 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 - AAAAAElFTkSuQmCC - - - - - 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 - - - \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/Class1.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/Class1.cs new file mode 100644 index 0000000..cc87a25 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/Class1.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ContosoUI.Order.AddEdit +{ + class Class1 + { + } +} diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/Presenter.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/Presenter.cs deleted file mode 100644 index 73a29c1..0000000 --- a/Solution/ContosoProject/ContosoUI/Order/AddEdit/Presenter.cs +++ /dev/null @@ -1,81 +0,0 @@ -using Data.DumbData; -using Domain.DAO; -using Domain.Entities; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ContosoUI.Order.AddEdit -{ - public class AddEditOrderPresenter - { - readonly AddEditOrderView view = new AddEditOrderView(); - readonly IOrderRepository model = new OrderDao(); - Domain.Entities.Order order; - - public AddEditOrderPresenter(AddEditOrderView view) - { - this.view = view; - } - - public Customer Customer - { - get - { - return order.Customer; - } - - set { order.Customer = value; } - } - - public List goodsList - { - get - { - return order.GoodsList; - } - - set { } - } - public double TotalCost - { - get - { - return order.TotalCost; - } - - set { order.TotalCost = value; } - } - - public OrderStatus Status - { - get - { - return order.Status; - } - - set { order.Status = Status; } - } - public List comments - { - get - { - return order.Comments; - } - - set { } - } - - } - - public class AddEditViewModel - { - public Customer Customer { get; set; } - public List goodsList { get; set; } - public double TotalCost { get; set; } - public OrderStatus Status { get; set; } - public List comments { get; set; } - } -} diff --git a/Solution/ContosoProject/ContosoUI/Order/Search/SearchPresenter.cs b/Solution/ContosoProject/ContosoUI/Order/Search/SearchPresenter.cs index 4d76e1d..28229d0 100644 --- a/Solution/ContosoProject/ContosoUI/Order/Search/SearchPresenter.cs +++ b/Solution/ContosoProject/ContosoUI/Order/Search/SearchPresenter.cs @@ -1,32 +1,52 @@ -using ContosoUI.Order.Search; -using Domain.DAO; +using Domain.DAO; +using Data.EFData; using Domain.Entities; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; +using ContosoUI.Presenter; namespace ContosoUI.Order.Search { - class SearchPresenter + class SearchPresenter : BasePresenter { readonly SearchView view; - readonly IOrderRepository model = new Data.DumbData.OrderDao(); - List ordersList = new List(); + readonly List statuses; + const string defaultStatus = "Все статусы"; + IUserNotify notifyManager = Program.MainWiewInstance; + readonly IOrderRepository orderModel = new OrderDao(); + readonly IOrderStatusRepository orderStatusModel = new OrderStatusDao(); public SearchPresenter(SearchView view) { this.view = view; + orders = new List(); + statuses = orderStatusModel.GetAll().Distinct().ToList(); + statuses.Add(new OrderStatus() { Status = defaultStatus }); } - } - public class SearchViewModel - { - public OrderStatus Status { get; set; } - public Customer Customer { get; set; } - public int countOfGoods { get; set; } - public double TotalCost { get; set; } - public int countOfComments { get; set; } + private List orders; + public List OrdersList + { + get { return orders; } + } + + public List StatusesList + { + get { return statuses; } + } + + public void SelectOrdersByStatus(OrderStatus status) + { + if (status.Status == defaultStatus) + { + orders = orderModel.GetAll().ToList(); + } + else if (statuses.Any(x=>x.Status == status.Status)) + { + orders = orderModel.GetOrderByStatus(status).ToList(); + } + + NotifyPropertyChanged("SelectOrdersByStatus"); + } } } diff --git a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.Designer.cs b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.Designer.cs index 226c403..e422737 100644 --- a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.Designer.cs +++ b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.Designer.cs @@ -30,27 +30,36 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SearchView)); + DevExpress.XtraGrid.GridLevelNode gridLevelNode1 = new DevExpress.XtraGrid.GridLevelNode(); this.ribbonControl = new DevExpress.XtraBars.Ribbon.RibbonControl(); this.searchBarButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.barButtonItem1 = new DevExpress.XtraBars.BarButtonItem(); + this.barButtonItem2 = new DevExpress.XtraBars.BarButtonItem(); this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); this.searchRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); + this.ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); this.layoutControl = new DevExpress.XtraLayout.LayoutControl(); this.statusComboBox = new System.Windows.Forms.ComboBox(); this.resultGridControl = new DevExpress.XtraGrid.GridControl(); - this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.orderBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.ordersGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); this.colCustomer = new DevExpress.XtraGrid.Columns.GridColumn(); - this.colcountOfGoods = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colGoodsList = new DevExpress.XtraGrid.Columns.GridColumn(); this.colTotalCost = new DevExpress.XtraGrid.Columns.GridColumn(); this.colStatus = new DevExpress.XtraGrid.Columns.GridColumn(); - this.colcountOfComments = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colComments = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn(); this.layoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup(); this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem(); this.statusLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.colId = new DevExpress.XtraGrid.Columns.GridColumn(); ((System.ComponentModel.ISupportInitialize)(this.ribbonControl)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControl)).BeginInit(); this.layoutControl.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.resultGridControl)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.orderBindingSource)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ordersGridView)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).BeginInit(); @@ -61,9 +70,11 @@ private void InitializeComponent() this.ribbonControl.ExpandCollapseItem.Id = 0; this.ribbonControl.Items.AddRange(new DevExpress.XtraBars.BarItem[] { this.ribbonControl.ExpandCollapseItem, - this.searchBarButtonItem}); + this.searchBarButtonItem, + this.barButtonItem1, + this.barButtonItem2}); this.ribbonControl.Location = new System.Drawing.Point(0, 0); - this.ribbonControl.MaxItemId = 2; + this.ribbonControl.MaxItemId = 6; this.ribbonControl.Name = "ribbonControl"; this.ribbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { this.mainRibbonPage}); @@ -71,102 +82,159 @@ private void InitializeComponent() // // searchBarButtonItem // - this.searchBarButtonItem.Caption = "Искать"; + this.searchBarButtonItem.Caption = "Искать заказы"; this.searchBarButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("searchBarButtonItem.Glyph"))); this.searchBarButtonItem.Id = 1; this.searchBarButtonItem.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("searchBarButtonItem.LargeGlyph"))); this.searchBarButtonItem.Name = "searchBarButtonItem"; + this.searchBarButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.searchBarButtonItem_ItemClick); + // + // barButtonItem1 + // + this.barButtonItem1.Caption = "Сохранить"; + this.barButtonItem1.Glyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem1.Glyph"))); + this.barButtonItem1.Id = 4; + this.barButtonItem1.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem1.LargeGlyph"))); + this.barButtonItem1.Name = "barButtonItem1"; + this.barButtonItem1.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem1_ItemClick); + // + // barButtonItem2 + // + this.barButtonItem2.Caption = "Печатать"; + this.barButtonItem2.Glyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem2.Glyph"))); + this.barButtonItem2.Id = 5; + this.barButtonItem2.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem2.LargeGlyph"))); + this.barButtonItem2.Name = "barButtonItem2"; + this.barButtonItem2.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem2_ItemClick); // // mainRibbonPage // this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { - this.searchRibbonPageGroup}); + this.searchRibbonPageGroup, + this.ribbonPageGroup1}); this.mainRibbonPage.Name = "mainRibbonPage"; - this.mainRibbonPage.Text = "Главная"; + this.mainRibbonPage.Text = "Меню"; // // searchRibbonPageGroup // this.searchRibbonPageGroup.ItemLinks.Add(this.searchBarButtonItem); - this.searchRibbonPageGroup.MergeOrder = 10; + this.searchRibbonPageGroup.MergeOrder = 5; this.searchRibbonPageGroup.Name = "searchRibbonPageGroup"; this.searchRibbonPageGroup.Text = "Поиск"; // + // ribbonPageGroup1 + // + this.ribbonPageGroup1.ItemLinks.Add(this.barButtonItem1); + this.ribbonPageGroup1.ItemLinks.Add(this.barButtonItem2); + this.ribbonPageGroup1.MergeOrder = 6; + this.ribbonPageGroup1.Name = "ribbonPageGroup1"; + this.ribbonPageGroup1.Text = "Сохранить"; + // // layoutControl // this.layoutControl.Controls.Add(this.statusComboBox); this.layoutControl.Controls.Add(this.resultGridControl); - this.layoutControl.Dock = System.Windows.Forms.DockStyle.Bottom; - this.layoutControl.Location = new System.Drawing.Point(0, 137); + this.layoutControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.layoutControl.Location = new System.Drawing.Point(0, 141); this.layoutControl.Name = "layoutControl"; this.layoutControl.Root = this.layoutControlGroup; - this.layoutControl.Size = new System.Drawing.Size(784, 424); + this.layoutControl.Size = new System.Drawing.Size(784, 420); this.layoutControl.TabIndex = 1; this.layoutControl.Text = "layoutControl1"; // // statusComboBox // + this.statusComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.statusComboBox.FormattingEnabled = true; - this.statusComboBox.Location = new System.Drawing.Point(51, 12); + this.statusComboBox.Location = new System.Drawing.Point(12, 28); this.statusComboBox.Name = "statusComboBox"; - this.statusComboBox.Size = new System.Drawing.Size(721, 21); + this.statusComboBox.Size = new System.Drawing.Size(760, 21); this.statusComboBox.TabIndex = 5; // // resultGridControl // - this.resultGridControl.Location = new System.Drawing.Point(12, 37); - this.resultGridControl.MainView = this.gridView1; + this.resultGridControl.DataSource = this.orderBindingSource; + gridLevelNode1.RelationName = "Level1"; + this.resultGridControl.LevelTree.Nodes.AddRange(new DevExpress.XtraGrid.GridLevelNode[] { + gridLevelNode1}); + this.resultGridControl.Location = new System.Drawing.Point(12, 53); + this.resultGridControl.MainView = this.ordersGridView; this.resultGridControl.MenuManager = this.ribbonControl; this.resultGridControl.Name = "resultGridControl"; - this.resultGridControl.Size = new System.Drawing.Size(760, 375); + this.resultGridControl.Size = new System.Drawing.Size(760, 355); this.resultGridControl.TabIndex = 4; this.resultGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.gridView1}); + this.ordersGridView}); + // + // orderBindingSource // - // gridView1 + this.orderBindingSource.DataSource = typeof(Domain.Entities.Order); // - this.gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + // ordersGridView + // + this.ordersGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.colId, this.colCustomer, - this.colcountOfGoods, + this.colGoodsList, this.colTotalCost, this.colStatus, - this.colcountOfComments}); - this.gridView1.GridControl = this.resultGridControl; - this.gridView1.Name = "gridView1"; + this.colComments, + this.colIsActive, + this.colEditTime}); + this.ordersGridView.GridControl = this.resultGridControl; + this.ordersGridView.Name = "ordersGridView"; + this.ordersGridView.OptionsBehavior.Editable = false; + this.ordersGridView.DoubleClick += new System.EventHandler(this.ordersGridView__DoubleClick); // // colCustomer // + this.colCustomer.Caption = "Клиент"; this.colCustomer.FieldName = "Customer"; this.colCustomer.Name = "colCustomer"; this.colCustomer.Visible = true; - this.colCustomer.VisibleIndex = 0; + this.colCustomer.VisibleIndex = 2; + this.colCustomer.Width = 455; // - // colcountOfGoods + // colGoodsList // - this.colcountOfGoods.FieldName = "countOfGoods"; - this.colcountOfGoods.Name = "colcountOfGoods"; - this.colcountOfGoods.Visible = true; - this.colcountOfGoods.VisibleIndex = 1; + this.colGoodsList.Caption = "Список товаров"; + this.colGoodsList.FieldName = "GoodsList"; + this.colGoodsList.Name = "colGoodsList"; + this.colGoodsList.Width = 268; // // colTotalCost // + this.colTotalCost.Caption = "Цена"; this.colTotalCost.FieldName = "TotalCost"; this.colTotalCost.Name = "colTotalCost"; + this.colTotalCost.OptionsColumn.ReadOnly = true; this.colTotalCost.Visible = true; - this.colTotalCost.VisibleIndex = 2; + this.colTotalCost.VisibleIndex = 3; + this.colTotalCost.Width = 128; // // colStatus // + this.colStatus.Caption = "Статус"; this.colStatus.FieldName = "Status"; this.colStatus.Name = "colStatus"; this.colStatus.Visible = true; - this.colStatus.VisibleIndex = 3; + this.colStatus.VisibleIndex = 1; + this.colStatus.Width = 100; + // + // colComments + // + this.colComments.FieldName = "Comments"; + this.colComments.Name = "colComments"; + // + // colIsActive // - // colcountOfComments + this.colIsActive.FieldName = "IsActive"; + this.colIsActive.Name = "colIsActive"; // - this.colcountOfComments.FieldName = "countOfComments"; - this.colcountOfComments.Name = "colcountOfComments"; - this.colcountOfComments.Visible = true; - this.colcountOfComments.VisibleIndex = 4; + // colEditTime + // + this.colEditTime.FieldName = "EditTime"; + this.colEditTime.Name = "colEditTime"; // // layoutControlGroup // @@ -176,16 +244,16 @@ private void InitializeComponent() this.layoutControlItem1, this.statusLayoutControlItem}); this.layoutControlGroup.Location = new System.Drawing.Point(0, 0); - this.layoutControlGroup.Name = "layoutControlGroup"; - this.layoutControlGroup.Size = new System.Drawing.Size(784, 424); + this.layoutControlGroup.Name = "Root"; + this.layoutControlGroup.Size = new System.Drawing.Size(784, 420); this.layoutControlGroup.TextVisible = false; // // layoutControlItem1 // this.layoutControlItem1.Control = this.resultGridControl; - this.layoutControlItem1.Location = new System.Drawing.Point(0, 25); + this.layoutControlItem1.Location = new System.Drawing.Point(0, 41); this.layoutControlItem1.Name = "layoutControlItem1"; - this.layoutControlItem1.Size = new System.Drawing.Size(764, 379); + this.layoutControlItem1.Size = new System.Drawing.Size(764, 359); this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0); this.layoutControlItem1.TextVisible = false; // @@ -194,10 +262,20 @@ private void InitializeComponent() this.statusLayoutControlItem.Control = this.statusComboBox; this.statusLayoutControlItem.Location = new System.Drawing.Point(0, 0); this.statusLayoutControlItem.Name = "statusLayoutControlItem"; - this.statusLayoutControlItem.Size = new System.Drawing.Size(764, 25); + this.statusLayoutControlItem.Size = new System.Drawing.Size(764, 41); this.statusLayoutControlItem.Text = "Статус"; + this.statusLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top; this.statusLayoutControlItem.TextSize = new System.Drawing.Size(36, 13); // + // colId + // + this.colId.Caption = "Номер"; + this.colId.FieldName = "Id"; + this.colId.Name = "colId"; + this.colId.Visible = true; + this.colId.VisibleIndex = 0; + this.colId.Width = 59; + // // SearchView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -207,11 +285,13 @@ private void InitializeComponent() this.Controls.Add(this.ribbonControl); this.Name = "SearchView"; this.Text = "Поиск"; + this.Load += new System.EventHandler(this.SearchView_Load); ((System.ComponentModel.ISupportInitialize)(this.ribbonControl)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControl)).EndInit(); this.layoutControl.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.resultGridControl)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.orderBindingSource)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ordersGridView)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).EndInit(); @@ -229,14 +309,21 @@ private void InitializeComponent() private DevExpress.XtraLayout.LayoutControl layoutControl; private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup; private DevExpress.XtraGrid.GridControl resultGridControl; - private DevExpress.XtraGrid.Views.Grid.GridView gridView1; + private DevExpress.XtraGrid.Views.Grid.GridView ordersGridView; private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1; private System.Windows.Forms.ComboBox statusComboBox; private DevExpress.XtraLayout.LayoutControlItem statusLayoutControlItem; + private DevExpress.XtraBars.BarButtonItem barButtonItem1; + private DevExpress.XtraBars.BarButtonItem barButtonItem2; + private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1; + private System.Windows.Forms.BindingSource orderBindingSource; private DevExpress.XtraGrid.Columns.GridColumn colCustomer; - private DevExpress.XtraGrid.Columns.GridColumn colcountOfGoods; + private DevExpress.XtraGrid.Columns.GridColumn colGoodsList; private DevExpress.XtraGrid.Columns.GridColumn colTotalCost; private DevExpress.XtraGrid.Columns.GridColumn colStatus; - private DevExpress.XtraGrid.Columns.GridColumn colcountOfComments; + private DevExpress.XtraGrid.Columns.GridColumn colComments; + private DevExpress.XtraGrid.Columns.GridColumn colIsActive; + private DevExpress.XtraGrid.Columns.GridColumn colEditTime; + private DevExpress.XtraGrid.Columns.GridColumn colId; } } \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.cs b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.cs index 7b589a9..577f7ec 100644 --- a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.cs +++ b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.cs @@ -1,21 +1,71 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Linq; -using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.XtraEditors; +using DevExpress.XtraGrid.Views.Grid.ViewInfo; +using DevExpress.XtraGrid.Views.Grid; namespace ContosoUI.Order.Search { - public partial class SearchView : DevExpress.XtraEditors.XtraForm + public partial class SearchView : XtraForm { + SearchPresenter presenter; + IUserNotify notifyManager = Program.MainWiewInstance; + const int defaultIndex = 5; + public SearchView() { InitializeComponent(); + presenter = new SearchPresenter(this); + } + + private void SearchView_Load(object sender, EventArgs e) + { + orderBindingSource.DataSource = presenter; + + statusComboBox.DataBindings.Add("DataSource", orderBindingSource, "StatusesList"); + statusComboBox.SelectedIndex = defaultIndex; + + resultGridControl.DataBindings.Add("DataSource", orderBindingSource, "OrdersList"); + + } + + private void searchBarButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + presenter.SelectOrdersByStatus(statusComboBox.SelectedValue as Domain.Entities.OrderStatus); + resultGridControl.RefreshDataSource(); + } + + private void ordersGridView__DoubleClick(object sender, EventArgs e) + { + GridHitInfo hi = ordersGridView.CalcHitInfo(resultGridControl.PointToClient(MousePosition)); + if (hi.InRowCell) + { + GridView view = (GridView)sender; + GridHitInfo info = view.CalcHitInfo(view.GridControl.PointToClient(MousePosition)); + int id = (int)view.GetRowCellValue(info.RowHandle, "Id"); + var form = new AddEditOrderView(id); + form.MdiParent = MdiParent; + form.Show(); + } + } + + private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + + saveFileDialog.Filter = "xls files (*.xls)|*.xls|All files (*.*)|*.*"; + + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + string FileName = saveFileDialog.FileName; + ordersGridView.ExportToXls(FileName); + } + } + + private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + ordersGridView.ShowPrintPreview(); + ordersGridView.Print(); } } } \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.resx b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.resx index 717cf0e..6b99a3b 100644 --- a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.resx +++ b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.resx @@ -185,4 +185,136 @@ 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 + GQAAAABJRU5ErkJggg== + + + + + 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 + + + + 17, 17 + + + 51 + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Presenter/BasePresenter.cs b/Solution/ContosoProject/ContosoUI/Presenter/BasePresenter.cs new file mode 100644 index 0000000..7c3b403 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Presenter/BasePresenter.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ContosoUI.Presenter +{ + public class BasePresenter : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + protected void NotifyPropertyChanged(String info) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(info)); + } + } + } +} diff --git a/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryPresenter.cs b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryPresenter.cs new file mode 100644 index 0000000..1bb7a70 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryPresenter.cs @@ -0,0 +1,71 @@ +using ContosoUI.Presenter; +using Data.EFData; +using Domain.DAO; +using Domain.Entities; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ContosoUI.ProductCategoryList +{ + public class ProductCategoryPresenter : BasePresenter + { + readonly ProductCategoryView view; + readonly IProductCategoryRepository model = new ProductCategoryDao(); + IUserNotify notifyManager = Program.MainWiewInstance; + public ProductCategoryPresenter(ProductCategoryView view) + { + this.view = view; + categories = model.GetAll().ToList(); + } + List categories = new List(); + public List Categories + { + get { return categories; } + set + { + if (value != categories) + { + categories = value; + NotifyPropertyChanged("Categories"); + } + } + } + + public void Save() + { + if (Validation()) + { + foreach (var category in categories) + { + model.AddOrUpdate(category); + } + notifyManager.ShowInfo("Изменения сохранены", "Информация"); + } + Categories.RemoveAll(x => !x.IsActive); + NotifyPropertyChanged("Save"); + } + bool Validation() + { + bool isValid = true; + if (categories.Any(x => x.IsActive == false)) + { + bool result = notifyManager.ShowYesNo("Вы уверенны, что хотите деактивировать категорию товаров? После деактивации категория будет удалена из списка!", "Деактивация категории"); + if (!result) + { + isValid = false; + } + } + if (categories.Any(x => string.IsNullOrWhiteSpace (x.CategoryName))) + { + + notifyManager.ShowWarning("Название категории не заполнено или поле содержит менее 2 или более 50 знаков. Проверьте правильность заполнения поля", "Предупреждение"); + isValid = false; + } + return isValid; + } + } +} diff --git a/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.Designer.cs b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.Designer.cs new file mode 100644 index 0000000..fa7ff34 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.Designer.cs @@ -0,0 +1,251 @@ +namespace ContosoUI.ProductCategoryList +{ + partial class ProductCategoryView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.categoryAddOrEditRibbonControl = new DevExpress.XtraBars.Ribbon.RibbonControl(); + this.saveAndNew = new DevExpress.XtraBars.BarButtonItem(); + this.saveButton = new DevExpress.XtraBars.BarButtonItem(); + this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); + this.saveRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); + this.categoryViewLayoutControl = new DevExpress.XtraLayout.LayoutControl(); + this.productCategoryGridControl = new DevExpress.XtraGrid.GridControl(); + this.productCategoryBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.categoriesGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.colCategoryName = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colId = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn(); + this.categoryLayoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup(); + this.productCategoryControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + ((System.ComponentModel.ISupportInitialize)(this.categoryAddOrEditRibbonControl)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.categoryViewLayoutControl)).BeginInit(); + this.categoryViewLayoutControl.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.productCategoryGridControl)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.productCategoryBindingSource)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.categoriesGridView)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.categoryLayoutControlGroup)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.productCategoryControlItem)).BeginInit(); + this.SuspendLayout(); + // + // categoryAddOrEditRibbonControl + // + this.categoryAddOrEditRibbonControl.ExpandCollapseItem.Id = 0; + this.categoryAddOrEditRibbonControl.Items.AddRange(new DevExpress.XtraBars.BarItem[] { + this.categoryAddOrEditRibbonControl.ExpandCollapseItem, + this.saveAndNew, + this.saveButton}); + this.categoryAddOrEditRibbonControl.Location = new System.Drawing.Point(0, 0); + this.categoryAddOrEditRibbonControl.MaxItemId = 3; + this.categoryAddOrEditRibbonControl.Name = "categoryAddOrEditRibbonControl"; + this.categoryAddOrEditRibbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { + this.mainRibbonPage}); + this.categoryAddOrEditRibbonControl.Size = new System.Drawing.Size(805, 141); + // + // saveAndNew + // + this.saveAndNew.Caption = "Добавить"; + this.saveAndNew.Id = 1; + this.saveAndNew.ImageUri.Uri = "SaveAndNew"; + this.saveAndNew.Name = "saveAndNew"; + this.saveAndNew.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveAndNew_ItemClick); + // + // saveButton + // + this.saveButton.Caption = "Сохранить"; + this.saveButton.Id = 2; + this.saveButton.ImageUri.Uri = "Save"; + this.saveButton.Name = "saveButton"; + this.saveButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveButton_ItemClick); + // + // mainRibbonPage + // + this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { + this.saveRibbonPageGroup}); + this.mainRibbonPage.Name = "mainRibbonPage"; + this.mainRibbonPage.Text = "Меню"; + // + // saveRibbonPageGroup + // + this.saveRibbonPageGroup.ItemLinks.Add(this.saveAndNew); + this.saveRibbonPageGroup.ItemLinks.Add(this.saveButton); + this.saveRibbonPageGroup.MergeOrder = 5; + this.saveRibbonPageGroup.Name = "saveRibbonPageGroup"; + this.saveRibbonPageGroup.Text = "Сохранение"; + // + // categoryViewLayoutControl + // + this.categoryViewLayoutControl.Controls.Add(this.productCategoryGridControl); + this.categoryViewLayoutControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.categoryViewLayoutControl.Location = new System.Drawing.Point(0, 141); + this.categoryViewLayoutControl.Name = "categoryViewLayoutControl"; + this.categoryViewLayoutControl.Root = this.categoryLayoutControlGroup; + this.categoryViewLayoutControl.Size = new System.Drawing.Size(805, 358); + this.categoryViewLayoutControl.TabIndex = 1; + this.categoryViewLayoutControl.Text = "layoutControl1"; + // + // productCategoryGridControl + // + this.productCategoryGridControl.DataSource = this.productCategoryBindingSource; + this.productCategoryGridControl.Location = new System.Drawing.Point(12, 12); + this.productCategoryGridControl.MainView = this.categoriesGridView; + this.productCategoryGridControl.MenuManager = this.categoryAddOrEditRibbonControl; + this.productCategoryGridControl.Name = "productCategoryGridControl"; + this.productCategoryGridControl.Size = new System.Drawing.Size(781, 334); + this.productCategoryGridControl.TabIndex = 4; + this.productCategoryGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.categoriesGridView}); + // + // productCategoryBindingSource + // + this.productCategoryBindingSource.DataSource = typeof(Domain.Entities.ProductCategory); + // + // categoriesGridView + // + this.categoriesGridView.ColumnPanelRowHeight = 50; + this.categoriesGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.colCategoryName, + this.colId, + this.colIsActive, + this.colEditTime}); + this.categoriesGridView.GridControl = this.productCategoryGridControl; + this.categoriesGridView.Name = "categoriesGridView"; + this.categoriesGridView.OptionsView.ColumnHeaderAutoHeight = DevExpress.Utils.DefaultBoolean.True; + this.categoriesGridView.OptionsView.RowAutoHeight = true; + // + // colCategoryName + // + this.colCategoryName.Caption = "Название категории"; + this.colCategoryName.FieldName = "CategoryName"; + this.colCategoryName.Name = "colCategoryName"; + this.colCategoryName.OptionsEditForm.RowSpan = 2; + this.colCategoryName.OptionsEditForm.VisibleIndex = 2; + this.colCategoryName.Visible = true; + this.colCategoryName.VisibleIndex = 1; + this.colCategoryName.Width = 318; + // + // colId + // + this.colId.FieldName = "Id"; + this.colId.Name = "colId"; + this.colId.OptionsColumn.AllowEdit = false; + this.colId.OptionsColumn.ReadOnly = true; + this.colId.OptionsEditForm.VisibleIndex = 1; + this.colId.Visible = true; + this.colId.VisibleIndex = 0; + this.colId.Width = 39; + // + // colIsActive + // + this.colIsActive.Caption = "Статус (активировать / деактивировать)"; + this.colIsActive.FieldName = "IsActive"; + this.colIsActive.Name = "colIsActive"; + this.colIsActive.OptionsEditForm.RowSpan = 2; + this.colIsActive.OptionsEditForm.VisibleIndex = 3; + this.colIsActive.Visible = true; + this.colIsActive.VisibleIndex = 2; + this.colIsActive.Width = 213; + // + // colEditTime + // + this.colEditTime.Caption = "Дата редактирования"; + this.colEditTime.FieldName = "EditTime"; + this.colEditTime.Name = "colEditTime"; + this.colEditTime.OptionsColumn.AllowEdit = false; + this.colEditTime.OptionsColumn.ReadOnly = true; + this.colEditTime.OptionsEditForm.RowSpan = 2; + this.colEditTime.OptionsEditForm.VisibleIndex = 4; + this.colEditTime.Visible = true; + this.colEditTime.VisibleIndex = 3; + this.colEditTime.Width = 193; + // + // categoryLayoutControlGroup + // + this.categoryLayoutControlGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True; + this.categoryLayoutControlGroup.GroupBordersVisible = false; + this.categoryLayoutControlGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { + this.productCategoryControlItem}); + this.categoryLayoutControlGroup.Location = new System.Drawing.Point(0, 0); + this.categoryLayoutControlGroup.Name = "categoryLayoutControlGroup"; + this.categoryLayoutControlGroup.Size = new System.Drawing.Size(805, 358); + this.categoryLayoutControlGroup.TextVisible = false; + // + // productCategoryControlItem + // + this.productCategoryControlItem.Control = this.productCategoryGridControl; + this.productCategoryControlItem.Location = new System.Drawing.Point(0, 0); + this.productCategoryControlItem.Name = "productCategoryControlItem"; + this.productCategoryControlItem.Size = new System.Drawing.Size(785, 338); + this.productCategoryControlItem.Text = "Список категорий товаров"; + this.productCategoryControlItem.TextLocation = DevExpress.Utils.Locations.Top; + this.productCategoryControlItem.TextSize = new System.Drawing.Size(0, 0); + this.productCategoryControlItem.TextVisible = false; + // + // ProductCategoryView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(805, 499); + this.Controls.Add(this.categoryViewLayoutControl); + this.Controls.Add(this.categoryAddOrEditRibbonControl); + this.Name = "ProductCategoryView"; + this.Text = "Категории товаров"; + this.Load += new System.EventHandler(this.ProductCategoryView_Load); + ((System.ComponentModel.ISupportInitialize)(this.categoryAddOrEditRibbonControl)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.categoryViewLayoutControl)).EndInit(); + this.categoryViewLayoutControl.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.productCategoryGridControl)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.productCategoryBindingSource)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.categoriesGridView)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.categoryLayoutControlGroup)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.productCategoryControlItem)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevExpress.XtraBars.Ribbon.RibbonControl categoryAddOrEditRibbonControl; + private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveRibbonPageGroup; + private DevExpress.XtraBars.BarButtonItem saveAndNew; + private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage; + private DevExpress.XtraBars.BarButtonItem saveButton; + private DevExpress.XtraLayout.LayoutControl categoryViewLayoutControl; + private DevExpress.XtraGrid.GridControl productCategoryGridControl; + private System.Windows.Forms.BindingSource productCategoryBindingSource; + private DevExpress.XtraGrid.Views.Grid.GridView categoriesGridView; + private DevExpress.XtraGrid.Columns.GridColumn colCategoryName; + private DevExpress.XtraGrid.Columns.GridColumn colId; + private DevExpress.XtraGrid.Columns.GridColumn colIsActive; + private DevExpress.XtraGrid.Columns.GridColumn colEditTime; + private DevExpress.XtraLayout.LayoutControlGroup categoryLayoutControlGroup; + private DevExpress.XtraLayout.LayoutControlItem productCategoryControlItem; + } +} \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.cs b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.cs new file mode 100644 index 0000000..ab50633 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.cs @@ -0,0 +1,44 @@ +using DevExpress.XtraGrid.Views.Grid; +using Domain.Entities; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ContosoUI.ProductCategoryList +{ + public partial class ProductCategoryView : DevExpress.XtraEditors.XtraForm + { + readonly ProductCategoryPresenter presenter; + public ProductCategoryView() + { + InitializeComponent(); + presenter = new ProductCategoryPresenter(this); + } + + private void saveAndNew_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + presenter.Categories.Add(new ProductCategory()); + productCategoryGridControl.RefreshDataSource(); + + } + + private void saveButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + categoriesGridView.CloseEditor(); + categoriesGridView.UpdateCurrentRow(); + presenter.Save(); + productCategoryGridControl.RefreshDataSource(); + } + + private void ProductCategoryView_Load(object sender, EventArgs e) + { + productCategoryGridControl.DataSource = presenter.Categories; + } + } +} diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.resx b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.resx similarity index 97% rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.resx rename to Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.resx index 11e22ad..f4e21bb 100644 --- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.resx +++ b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.resx @@ -117,7 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Program.cs b/Solution/ContosoProject/ContosoUI/Program.cs index da78404..4db94bf 100644 --- a/Solution/ContosoProject/ContosoUI/Program.cs +++ b/Solution/ContosoProject/ContosoUI/Program.cs @@ -1,6 +1,4 @@ -using ContosoUI.Customers.Search; -using ContosoUI.Customers.Add; -using Data.DumbData; +using Data.DumbData; using Domain.DAO; using Domain.Entities; using System; @@ -9,22 +7,27 @@ using System.Threading.Tasks; using System.Windows.Forms; using ContosoUI.Authentication; +using System.IO; +using System.Reflection; namespace ContosoUI { static class Program { public static User AuthUser { get; private set; } + public static MainView MainWiewInstance { get; private set; } /// /// The main entry point for the application. /// [STAThread] static void Main() { + AppDomain.CurrentDomain.SetData("DataDirectory", Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)); + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); GetAuthUser(); - Application.Run(new MainView()); + Application.Run(MainWiewInstance = new MainView()); } private static void GetAuthUser() @@ -33,7 +36,7 @@ private static void GetAuthUser() auth.ShowDialog(); if (auth.DialogResult==DialogResult.OK) { - AuthUser = auth.presenter.user; + AuthUser = auth.Presenter.User; } else { diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditOrderPresenter.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditOrderPresenter.datasource new file mode 100644 index 0000000..cf39cd3 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditOrderPresenter.datasource @@ -0,0 +1,10 @@ + + + + ContosoUI.Order.AddEdit.AddEditOrderPresenter, ContosoUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditViewModel.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditViewModel.datasource new file mode 100644 index 0000000..4e2391a --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditViewModel.datasource @@ -0,0 +1,10 @@ + + + + ContosoUI.Order.AddEdit.AddEditViewModel, ContosoUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel.datasource new file mode 100644 index 0000000..5a05078 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel.datasource @@ -0,0 +1,10 @@ + + + + ContosoUI.Order.Search.SearchViewModel, ContosoUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel1.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel1.datasource new file mode 100644 index 0000000..5a05078 --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel1.datasource @@ -0,0 +1,10 @@ + + + + ContosoUI.Order.Search.SearchViewModel, ContosoUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.GoodsRow.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.GoodsRow.datasource new file mode 100644 index 0000000..ecd07db --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.GoodsRow.datasource @@ -0,0 +1,10 @@ + + + + Domain.Entities.GoodsRow, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.ProductCategory.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.ProductCategory.datasource new file mode 100644 index 0000000..4aa44bd --- /dev/null +++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.ProductCategory.datasource @@ -0,0 +1,10 @@ + + + + Domain.Entities.ProductCategory, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Properties/licenses.licx b/Solution/ContosoProject/ContosoUI/Properties/licenses.licx index d3e9d73..5368de3 100644 --- a/Solution/ContosoProject/ContosoUI/Properties/licenses.licx +++ b/Solution/ContosoProject/ContosoUI/Properties/licenses.licx @@ -1,8 +1,10 @@ -DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.Patch.InMemoryPatch, DevExpress.Patch.Common, Version=6.2.0.0, Culture=neutral, PublicKeyToken=7fc7bfca2443de66 +DevExpress.XtraTabbedMdi.XtraTabbedMdiManager, DevExpress.XtraBars.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraReports.UI.XtraReport, DevExpress.XtraReports.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraTabbedMdi.XtraTabbedMdiManager, DevExpress.XtraBars.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.LookUpEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/Solution/ContosoProject/ContosoUI/Roles/RolesPresenter.cs b/Solution/ContosoProject/ContosoUI/Roles/RolesPresenter.cs index 82df6fd..ba540b6 100644 --- a/Solution/ContosoProject/ContosoUI/Roles/RolesPresenter.cs +++ b/Solution/ContosoProject/ContosoUI/Roles/RolesPresenter.cs @@ -1,4 +1,5 @@ -using Data.EFData; +using ContosoUI.Presenter; +using Data.EFData; using Domain.DAO; using Domain.Entities; using System; @@ -7,20 +8,29 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows.Forms; namespace ContosoUI.Roles { - public class RolesPresenter : INotifyPropertyChanged + public class RolesPresenter : BasePresenter { readonly RolesView view; - readonly IRoleRepository model = new RoleDao(); - readonly IPermissionRepository modelPermission = new PermissionDao(); - Role role; + readonly RoleViewService modelProxy = new RoleViewService(); + IUserNotify notifyManager = Program.MainWiewInstance; public RolesPresenter(RolesView view) { this.view = view; - Roles = model.GetAll().ToList(); - Permissions = modelPermission.GetAll().ToList(); + Roles = modelProxy.RoleDao.GetAll().ToList(); + Permissions = modelProxy.PermissionDao.GetAll().ToList(); + foreach (var role in Roles) + { + List listPermissions = new List(); + foreach (var permission in role.Permissions) + { + listPermissions.Add(Permissions.First(x => x.Id == permission.Id)); + } + role.Permissions = listPermissions; + } } List roles = new List(); public List Roles @@ -49,24 +59,45 @@ public List Permissions } } } - public event PropertyChangedEventHandler PropertyChanged; - private void NotifyPropertyChanged(String info) + public void Save() { - if (PropertyChanged != null) + if (ValidationRolesBeforeSave()) { - PropertyChanged(this, new PropertyChangedEventArgs(info)); + foreach (var role in roles) + { + modelProxy.RoleDao.AddOrUpdate(role); + } + notifyManager.ShowInfo("Изменения сохранены", "Информация"); } + Roles.RemoveAll(x => !x.IsActive); + NotifyPropertyChanged("Save"); } - public void Save() + bool ValidationRolesBeforeSave() { - if (role.Id > 0) + bool isValid = true; + if (roles.Any(x => x.IsActive == false)) { - model.Update(this.role); + bool result = notifyManager.ShowYesNo("Вы уверенны, что хотите деактивировать роль пользователя? После деактивации роль будет удалена из списка!", "Предупреждение"); + if (!result) + { + isValid = false; + } + } + if (roles.Any(x => string.IsNullOrWhiteSpace( x.Name))) + { + notifyManager.ShowWarning("Запрещено создавать роль без названия", "Предупреждение"); + isValid = false; } - else + foreach (var role in roles) { - model.Add(role); + if (role == null || role.Permissions.Count == 0) + { + string roleName = role.Name; + notifyManager.ShowWarning("Роль " + roleName + " не содержит разрешений. Запрещено создавать роль без назначения разрешений", "Предупреждение"); + isValid = false; + } } + return isValid; } } } diff --git a/Solution/ContosoProject/ContosoUI/Roles/RolesView.Designer.cs b/Solution/ContosoProject/ContosoUI/Roles/RolesView.Designer.cs index d740c63..c82405d 100644 --- a/Solution/ContosoProject/ContosoUI/Roles/RolesView.Designer.cs +++ b/Solution/ContosoProject/ContosoUI/Roles/RolesView.Designer.cs @@ -28,44 +28,33 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); this.rolesRibbomItem = new DevExpress.XtraBars.Ribbon.RibbonControl(); this.saveRoleButton = new DevExpress.XtraBars.BarButtonItem(); this.addNewRoleButton = new DevExpress.XtraBars.BarButtonItem(); this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); this.saveRoleRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); - this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl(); - this.newRoleTextEdit = new DevExpress.XtraEditors.TextEdit(); + this.roleLayoutControl = new DevExpress.XtraLayout.LayoutControl(); this.permissionsCheckedListBoxControl = new DevExpress.XtraEditors.CheckedListBoxControl(); this.rolesGridControl = new DevExpress.XtraGrid.GridControl(); this.rolesGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup(); - this.roleControlItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.permissionsControlItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem(); - this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem(); - this.emptySpaceItem2 = new DevExpress.XtraLayout.EmptySpaceItem(); - this.roleBindingSource = new System.Windows.Forms.BindingSource(this.components); - this.roleBindingSource1 = new System.Windows.Forms.BindingSource(this.components); this.colName = new DevExpress.XtraGrid.Columns.GridColumn(); this.colId = new DevExpress.XtraGrid.Columns.GridColumn(); this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn(); this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn(); + this.rolePermissionLayoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup(); + this.roleControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.permissionsControlItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem(); ((System.ComponentModel.ISupportInitialize)(this.rolesRibbomItem)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit(); - this.layoutControl1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.newRoleTextEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.roleLayoutControl)).BeginInit(); + this.roleLayoutControl.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.permissionsCheckedListBoxControl)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.rolesGridControl)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.rolesGridView)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.rolePermissionLayoutControlGroup)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.roleControlItem)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.permissionsControlItem)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.roleBindingSource)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.roleBindingSource1)).BeginInit(); this.SuspendLayout(); // // rolesRibbomItem @@ -102,6 +91,7 @@ private void InitializeComponent() // this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { this.saveRoleRibbonPageGroup}); + this.mainRibbonPage.MergeOrder = 1; this.mainRibbonPage.Name = "mainRibbonPage"; this.mainRibbonPage.Text = "Меню"; // @@ -109,31 +99,22 @@ private void InitializeComponent() // this.saveRoleRibbonPageGroup.ItemLinks.Add(this.saveRoleButton); this.saveRoleRibbonPageGroup.ItemLinks.Add(this.addNewRoleButton); + this.saveRoleRibbonPageGroup.MergeOrder = 5; this.saveRoleRibbonPageGroup.Name = "saveRoleRibbonPageGroup"; this.saveRoleRibbonPageGroup.Text = "Сохранение"; // - // layoutControl1 - // - this.layoutControl1.Controls.Add(this.newRoleTextEdit); - this.layoutControl1.Controls.Add(this.permissionsCheckedListBoxControl); - this.layoutControl1.Controls.Add(this.rolesGridControl); - this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.layoutControl1.Location = new System.Drawing.Point(0, 141); - this.layoutControl1.Name = "layoutControl1"; - this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(196, 127, 328, 350); - this.layoutControl1.Root = this.layoutControlGroup1; - this.layoutControl1.Size = new System.Drawing.Size(799, 527); - this.layoutControl1.TabIndex = 1; - this.layoutControl1.Text = "layoutControl1"; - // - // newRoleTextEdit - // - this.newRoleTextEdit.Location = new System.Drawing.Point(115, 495); - this.newRoleTextEdit.MenuManager = this.rolesRibbomItem; - this.newRoleTextEdit.Name = "newRoleTextEdit"; - this.newRoleTextEdit.Size = new System.Drawing.Size(404, 20); - this.newRoleTextEdit.StyleController = this.layoutControl1; - this.newRoleTextEdit.TabIndex = 6; + // roleLayoutControl + // + this.roleLayoutControl.Controls.Add(this.permissionsCheckedListBoxControl); + this.roleLayoutControl.Controls.Add(this.rolesGridControl); + this.roleLayoutControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.roleLayoutControl.Location = new System.Drawing.Point(0, 141); + this.roleLayoutControl.Name = "roleLayoutControl"; + this.roleLayoutControl.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(196, 127, 328, 350); + this.roleLayoutControl.Root = this.rolePermissionLayoutControlGroup; + this.roleLayoutControl.Size = new System.Drawing.Size(799, 527); + this.roleLayoutControl.TabIndex = 1; + this.roleLayoutControl.Text = "layoutControl1"; // // permissionsCheckedListBoxControl // @@ -142,26 +123,26 @@ private void InitializeComponent() this.permissionsCheckedListBoxControl.Location = new System.Drawing.Point(540, 28); this.permissionsCheckedListBoxControl.Name = "permissionsCheckedListBoxControl"; this.permissionsCheckedListBoxControl.SelectionMode = System.Windows.Forms.SelectionMode.None; - this.permissionsCheckedListBoxControl.Size = new System.Drawing.Size(247, 463); + this.permissionsCheckedListBoxControl.Size = new System.Drawing.Size(247, 487); this.permissionsCheckedListBoxControl.SortOrder = System.Windows.Forms.SortOrder.Ascending; - this.permissionsCheckedListBoxControl.StyleController = this.layoutControl1; + this.permissionsCheckedListBoxControl.StyleController = this.roleLayoutControl; this.permissionsCheckedListBoxControl.TabIndex = 5; this.permissionsCheckedListBoxControl.ValueMember = "Id"; // // rolesGridControl // - this.rolesGridControl.DataSource = this.roleBindingSource1; this.rolesGridControl.Location = new System.Drawing.Point(12, 28); this.rolesGridControl.MainView = this.rolesGridView; this.rolesGridControl.MenuManager = this.rolesRibbomItem; this.rolesGridControl.Name = "rolesGridControl"; - this.rolesGridControl.Size = new System.Drawing.Size(507, 463); + this.rolesGridControl.Size = new System.Drawing.Size(507, 487); this.rolesGridControl.TabIndex = 4; this.rolesGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { this.rolesGridView}); // // rolesGridView // + this.rolesGridView.ColumnPanelRowHeight = 50; this.rolesGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { this.colName, this.colId, @@ -169,30 +150,70 @@ private void InitializeComponent() this.colEditTime}); this.rolesGridView.GridControl = this.rolesGridControl; this.rolesGridView.Name = "rolesGridView"; + this.rolesGridView.OptionsView.ColumnHeaderAutoHeight = DevExpress.Utils.DefaultBoolean.True; + this.rolesGridView.OptionsView.RowAutoHeight = true; this.rolesGridView.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.rolesGridView_FocusedRowChanged); this.rolesGridView.BeforeLeaveRow += new DevExpress.XtraGrid.Views.Base.RowAllowEventHandler(this.rolesGridView_BeforeLeaveRow); // - // layoutControlGroup1 + // colName + // + this.colName.Caption = "Имя роли"; + this.colName.FieldName = "Name"; + this.colName.Name = "colName"; + this.colName.Visible = true; + this.colName.VisibleIndex = 1; + this.colName.Width = 171; + // + // colId + // + this.colId.FieldName = "Id"; + this.colId.Name = "colId"; + this.colId.OptionsColumn.AllowEdit = false; + this.colId.OptionsColumn.ReadOnly = true; + this.colId.Visible = true; + this.colId.VisibleIndex = 0; + this.colId.Width = 72; + // + // colIsActive + // + this.colIsActive.Caption = "Статус (активировать/ деактивировать)"; + this.colIsActive.FieldName = "IsActive"; + this.colIsActive.Name = "colIsActive"; + this.colIsActive.OptionsEditForm.RowSpan = 2; + this.colIsActive.Visible = true; + this.colIsActive.VisibleIndex = 2; + this.colIsActive.Width = 124; + // + // colEditTime + // + this.colEditTime.Caption = "Дата редактирования"; + this.colEditTime.FieldName = "EditTime"; + this.colEditTime.Name = "colEditTime"; + this.colEditTime.OptionsColumn.AllowEdit = false; + this.colEditTime.OptionsColumn.ReadOnly = true; + this.colEditTime.Visible = true; + this.colEditTime.VisibleIndex = 3; + this.colEditTime.Width = 122; + // + // rolePermissionLayoutControlGroup // - this.layoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True; - this.layoutControlGroup1.GroupBordersVisible = false; - this.layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { + this.rolePermissionLayoutControlGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True; + this.rolePermissionLayoutControlGroup.GroupBordersVisible = false; + this.rolePermissionLayoutControlGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { this.roleControlItem, this.permissionsControlItem, - this.emptySpaceItem1, - this.layoutControlItem1, - this.emptySpaceItem2}); - this.layoutControlGroup1.Location = new System.Drawing.Point(0, 0); - this.layoutControlGroup1.Name = "Root"; - this.layoutControlGroup1.Size = new System.Drawing.Size(799, 527); - this.layoutControlGroup1.TextVisible = false; + this.emptySpaceItem1}); + this.rolePermissionLayoutControlGroup.Location = new System.Drawing.Point(0, 0); + this.rolePermissionLayoutControlGroup.Name = "rolePermissionLayoutControlGroup"; + this.rolePermissionLayoutControlGroup.Size = new System.Drawing.Size(799, 527); + this.rolePermissionLayoutControlGroup.TextVisible = false; // // roleControlItem // this.roleControlItem.Control = this.rolesGridControl; this.roleControlItem.Location = new System.Drawing.Point(0, 0); this.roleControlItem.Name = "roleControlItem"; - this.roleControlItem.Size = new System.Drawing.Size(511, 483); + this.roleControlItem.Size = new System.Drawing.Size(511, 507); this.roleControlItem.Text = "Список ролей"; this.roleControlItem.TextLocation = DevExpress.Utils.Locations.Top; this.roleControlItem.TextSize = new System.Drawing.Size(100, 13); @@ -202,7 +223,7 @@ private void InitializeComponent() this.permissionsControlItem.Control = this.permissionsCheckedListBoxControl; this.permissionsControlItem.Location = new System.Drawing.Point(528, 0); this.permissionsControlItem.Name = "permissionsControlItem"; - this.permissionsControlItem.Size = new System.Drawing.Size(251, 483); + this.permissionsControlItem.Size = new System.Drawing.Size(251, 507); this.permissionsControlItem.Text = "Список разрешений"; this.permissionsControlItem.TextLocation = DevExpress.Utils.Locations.Top; this.permissionsControlItem.TextSize = new System.Drawing.Size(100, 13); @@ -212,83 +233,29 @@ private void InitializeComponent() this.emptySpaceItem1.AllowHotTrack = false; this.emptySpaceItem1.Location = new System.Drawing.Point(511, 0); this.emptySpaceItem1.Name = "emptySpaceItem1"; - this.emptySpaceItem1.Size = new System.Drawing.Size(17, 483); + this.emptySpaceItem1.Size = new System.Drawing.Size(17, 507); this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0); // - // layoutControlItem1 - // - this.layoutControlItem1.Control = this.newRoleTextEdit; - this.layoutControlItem1.Location = new System.Drawing.Point(0, 483); - this.layoutControlItem1.Name = "layoutControlItem1"; - this.layoutControlItem1.Size = new System.Drawing.Size(511, 24); - this.layoutControlItem1.Text = "Новая роль"; - this.layoutControlItem1.TextSize = new System.Drawing.Size(100, 13); - // - // emptySpaceItem2 - // - this.emptySpaceItem2.AllowHotTrack = false; - this.emptySpaceItem2.Location = new System.Drawing.Point(511, 483); - this.emptySpaceItem2.Name = "emptySpaceItem2"; - this.emptySpaceItem2.Size = new System.Drawing.Size(268, 24); - this.emptySpaceItem2.TextSize = new System.Drawing.Size(0, 0); - // - // roleBindingSource1 - // - this.roleBindingSource1.DataSource = typeof(Domain.Entities.Role); - // - // colName - // - this.colName.FieldName = "Name"; - this.colName.Name = "colName"; - this.colName.Visible = true; - this.colName.VisibleIndex = 0; - // - // colId - // - this.colId.FieldName = "Id"; - this.colId.Name = "colId"; - this.colId.Visible = true; - this.colId.VisibleIndex = 1; - // - // colIsActive - // - this.colIsActive.FieldName = "IsActive"; - this.colIsActive.Name = "colIsActive"; - this.colIsActive.Visible = true; - this.colIsActive.VisibleIndex = 2; - // - // colEditTime - // - this.colEditTime.FieldName = "EditTime"; - this.colEditTime.Name = "colEditTime"; - this.colEditTime.Visible = true; - this.colEditTime.VisibleIndex = 3; - // // RolesView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(799, 668); - this.Controls.Add(this.layoutControl1); + this.Controls.Add(this.roleLayoutControl); this.Controls.Add(this.rolesRibbomItem); this.Name = "RolesView"; this.Text = "Роли пользователя"; this.Load += new System.EventHandler(this.RolesView_Load); ((System.ComponentModel.ISupportInitialize)(this.rolesRibbomItem)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit(); - this.layoutControl1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.newRoleTextEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.roleLayoutControl)).EndInit(); + this.roleLayoutControl.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.permissionsCheckedListBoxControl)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.rolesGridControl)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.rolesGridView)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.rolePermissionLayoutControlGroup)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.roleControlItem)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.permissionsControlItem)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.roleBindingSource)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.roleBindingSource1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -301,19 +268,14 @@ private void InitializeComponent() private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveRoleRibbonPageGroup; private DevExpress.XtraBars.BarButtonItem saveRoleButton; private DevExpress.XtraBars.BarButtonItem addNewRoleButton; - private DevExpress.XtraLayout.LayoutControl layoutControl1; - private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1; + private DevExpress.XtraLayout.LayoutControl roleLayoutControl; + private DevExpress.XtraLayout.LayoutControlGroup rolePermissionLayoutControlGroup; private DevExpress.XtraGrid.GridControl rolesGridControl; private DevExpress.XtraGrid.Views.Grid.GridView rolesGridView; private DevExpress.XtraLayout.LayoutControlItem roleControlItem; private DevExpress.XtraEditors.CheckedListBoxControl permissionsCheckedListBoxControl; private DevExpress.XtraLayout.LayoutControlItem permissionsControlItem; private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1; - private DevExpress.XtraEditors.TextEdit newRoleTextEdit; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1; - private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem2; - private System.Windows.Forms.BindingSource roleBindingSource; - private System.Windows.Forms.BindingSource roleBindingSource1; private DevExpress.XtraGrid.Columns.GridColumn colName; private DevExpress.XtraGrid.Columns.GridColumn colId; private DevExpress.XtraGrid.Columns.GridColumn colIsActive; diff --git a/Solution/ContosoProject/ContosoUI/Roles/RolesView.cs b/Solution/ContosoProject/ContosoUI/Roles/RolesView.cs index 5c4a59d..f126f30 100644 --- a/Solution/ContosoProject/ContosoUI/Roles/RolesView.cs +++ b/Solution/ContosoProject/ContosoUI/Roles/RolesView.cs @@ -1,4 +1,5 @@ -using DevExpress.XtraGrid.Views.Grid; +using DevExpress.XtraEditors.Controls; +using DevExpress.XtraGrid.Views.Grid; using Domain.Entities; using System; using System.Collections.Generic; @@ -27,13 +28,16 @@ public RolesView() this.saveRoleButton.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; } presenter = new RolesPresenter(this); + List items = new List(); + foreach (var perm in presenter.Permissions) + { + items.Add(new CheckedListBoxItem(perm, perm.Name, false)); + } + permissionsCheckedListBoxControl.Items.AddRange(items.ToArray()); } private void RolesView_Load(object sender, EventArgs e) { rolesGridControl.DataSource = presenter.Roles; - permissionsCheckedListBoxControl.DataSource = presenter.Permissions; - permissionsCheckedListBoxControl.DisplayMember = "Name"; - permissionsCheckedListBoxControl.ValueMember = "Id"; } private void rolesGridView_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) { @@ -49,9 +53,10 @@ private void rolesGridView_FocusedRowChanged(object sender, DevExpress.XtraGrid. private void SetCheckedPermissions(ICollection permissions) { permissionsCheckedListBoxControl.UnCheckAll(); - foreach (var perm in permissions) + foreach (var permission in permissions) { - permissionsCheckedListBoxControl.SetItemChecked(perm.Id - 1, true); + var permissionIndex = permissionsCheckedListBoxControl.FindString(permission.Name); + permissionsCheckedListBoxControl.SetItemChecked(permissionIndex, true); } } @@ -62,20 +67,33 @@ private void addNewRoleButton_ItemClick(object sender, DevExpress.XtraBars.ItemC } private void saveRoleButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { + SavePermissions(); + rolesGridView.CloseEditor(); + rolesGridView.UpdateCurrentRow(); presenter.Save(); + rolesGridControl.RefreshDataSource(); } private void rolesGridView_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e) { - GridView view = sender as GridView; + SavePermissions(); + rolesGridView.CloseEditor(); + rolesGridView.UpdateCurrentRow(); + } + void SavePermissions() + { + GridView view = rolesGridView; object roleObj = view.GetRow(view.FocusedRowHandle); Role role = roleObj as Role; - - var permissions = permissionsCheckedListBoxControl.CheckedItems; - role.Permissions.Clear(); - foreach (var p in permissions) + if (role != null) { - role.Permissions.Add(p as Permission); + var permissions = permissionsCheckedListBoxControl.CheckedItems; + role.Permissions.Clear(); + foreach (var p in permissions) + { + var checkedListItem = p as CheckedListBoxItem; + role.Permissions.Add(checkedListItem.Value as Permission); + } } } } diff --git a/Solution/ContosoProject/ContosoUI/Roles/RolesView.resx b/Solution/ContosoProject/ContosoUI/Roles/RolesView.resx index 7d71f23..1af7de1 100644 --- a/Solution/ContosoProject/ContosoUI/Roles/RolesView.resx +++ b/Solution/ContosoProject/ContosoUI/Roles/RolesView.resx @@ -117,10 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 168, 17 - - - 17, 17 - \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.Designer.cs b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.Designer.cs index 7cc3fc6..7a6be38 100644 --- a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.Designer.cs +++ b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.Designer.cs @@ -32,70 +32,72 @@ private void InitializeComponent() this.ChangePasswordBarBtn = new DevExpress.XtraBars.BarButtonItem(); this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage(); this.saveOrEditribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); - this.MiddleNameTextEdit = new DevExpress.XtraEditors.TextEdit(); - this.LastNameTextEdit = new DevExpress.XtraEditors.TextEdit(); - this.FirstNameTextEdit = new DevExpress.XtraEditors.TextEdit(); + this.middleNameTextEdit = new DevExpress.XtraEditors.TextEdit(); + this.lastNameTextEdit = new DevExpress.XtraEditors.TextEdit(); + this.firstNameTextEdit = new DevExpress.XtraEditors.TextEdit(); this.OldPasswordTextEdit = new DevExpress.XtraEditors.TextEdit(); this.loginTextEdit = new DevExpress.XtraEditors.TextEdit(); - this.NewPasswordTextEdit = new DevExpress.XtraEditors.TextEdit(); - this.ConfimPasswordTextEdit = new DevExpress.XtraEditors.TextEdit(); - this.SelectRoleComboBox = new DevExpress.XtraEditors.ComboBoxEdit(); - this.customerGroup = new DevExpress.XtraLayout.LayoutControlGroup(); - this.personalInfoGroup = new DevExpress.XtraLayout.LayoutControlGroup(); + this.newPasswordTextEdit = new DevExpress.XtraEditors.TextEdit(); + this.confimPasswordTextEdit = new DevExpress.XtraEditors.TextEdit(); + this.selectRoleComboBox = new DevExpress.XtraEditors.ComboBoxEdit(); + this.userGroup = new DevExpress.XtraLayout.LayoutControlGroup(); + this.authInfoGroup = new DevExpress.XtraLayout.LayoutControlGroup(); this.oldPasswordLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); this.loginLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); this.newPasswordLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); this.confimPasswordLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.contactInfoGroup = new DevExpress.XtraLayout.LayoutControlGroup(); - this.lastNameItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.personalInfoGroup = new DevExpress.XtraLayout.LayoutControlGroup(); this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem(); this.middleNameItem = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem(); + this.rol = new DevExpress.XtraLayout.LayoutControlItem(); this.IsActiveUserLayoutControl = new DevExpress.XtraLayout.LayoutControlItem(); + this.lastNameItem = new DevExpress.XtraLayout.LayoutControlItem(); + this.RoleLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem(); this.userEditBindingSource = new System.Windows.Forms.BindingSource(this.components); ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit(); this.layoutControl1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.IsActiveUserCheckEdit.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.MiddleNameTextEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.LastNameTextEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.FirstNameTextEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.middleNameTextEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.lastNameTextEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.firstNameTextEdit.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.OldPasswordTextEdit.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.loginTextEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.NewPasswordTextEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ConfimPasswordTextEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.SelectRoleComboBox.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.customerGroup)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.personalInfoGroup)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.newPasswordTextEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.confimPasswordTextEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.selectRoleComboBox.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.userGroup)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.authInfoGroup)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.oldPasswordLayoutControlItem)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.loginLayoutControlItem)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.newPasswordLayoutControlItem)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.confimPasswordLayoutControlItem)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.contactInfoGroup)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.lastNameItem)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.personalInfoGroup)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.middleNameItem)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.rol)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.IsActiveUserLayoutControl)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.lastNameItem)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RoleLayoutControlItem)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.userEditBindingSource)).BeginInit(); this.SuspendLayout(); // // layoutControl1 // this.layoutControl1.Controls.Add(this.IsActiveUserCheckEdit); - this.layoutControl1.Controls.Add(this.MiddleNameTextEdit); - this.layoutControl1.Controls.Add(this.LastNameTextEdit); - this.layoutControl1.Controls.Add(this.FirstNameTextEdit); + this.layoutControl1.Controls.Add(this.middleNameTextEdit); + this.layoutControl1.Controls.Add(this.lastNameTextEdit); + this.layoutControl1.Controls.Add(this.firstNameTextEdit); this.layoutControl1.Controls.Add(this.OldPasswordTextEdit); this.layoutControl1.Controls.Add(this.loginTextEdit); - this.layoutControl1.Controls.Add(this.NewPasswordTextEdit); - this.layoutControl1.Controls.Add(this.ConfimPasswordTextEdit); - this.layoutControl1.Controls.Add(this.SelectRoleComboBox); + this.layoutControl1.Controls.Add(this.newPasswordTextEdit); + this.layoutControl1.Controls.Add(this.confimPasswordTextEdit); + this.layoutControl1.Controls.Add(this.selectRoleComboBox); this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.layoutControl1.Location = new System.Drawing.Point(0, 143); this.layoutControl1.Name = "layoutControl1"; this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(413, 69, 631, 398); - this.layoutControl1.Root = this.customerGroup; + this.layoutControl1.Root = this.userGroup; this.layoutControl1.Size = new System.Drawing.Size(953, 522); this.layoutControl1.TabIndex = 0; this.layoutControl1.Text = "layoutControl1"; @@ -129,6 +131,7 @@ private void InitializeComponent() // saveEditButtonItem // this.saveEditButtonItem.Caption = "Сохранить"; + this.saveEditButtonItem.CausesValidation = true; this.saveEditButtonItem.Id = 1; this.saveEditButtonItem.ImageUri.Uri = "Save"; this.saveEditButtonItem.Name = "saveEditButtonItem"; @@ -150,45 +153,56 @@ private void InitializeComponent() // saveOrEditribbonPageGroup // this.saveOrEditribbonPageGroup.ItemLinks.Add(this.saveEditButtonItem); + this.saveOrEditribbonPageGroup.MergeOrder = 5; this.saveOrEditribbonPageGroup.Name = "saveOrEditribbonPageGroup"; this.saveOrEditribbonPageGroup.Text = "Сохранение"; // - // MiddleNameTextEdit - // - this.MiddleNameTextEdit.Location = new System.Drawing.Point(306, 138); - this.MiddleNameTextEdit.Name = "MiddleNameTextEdit"; - this.MiddleNameTextEdit.Properties.Mask.EditMask = "\\p{L}+"; - this.MiddleNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx; - this.MiddleNameTextEdit.Properties.Mask.ShowPlaceHolders = false; - this.MiddleNameTextEdit.Size = new System.Drawing.Size(623, 20); - this.MiddleNameTextEdit.StyleController = this.layoutControl1; - this.MiddleNameTextEdit.TabIndex = 6; - // - // LastNameTextEdit - // - this.LastNameTextEdit.Location = new System.Drawing.Point(306, 98); - this.LastNameTextEdit.Name = "LastNameTextEdit"; - this.LastNameTextEdit.Properties.Mask.EditMask = "\\p{L}+"; - this.LastNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx; - this.LastNameTextEdit.Properties.Mask.ShowPlaceHolders = false; - this.LastNameTextEdit.Size = new System.Drawing.Size(623, 20); - this.LastNameTextEdit.StyleController = this.layoutControl1; - this.LastNameTextEdit.TabIndex = 5; - // - // FirstNameTextEdit - // - this.FirstNameTextEdit.Location = new System.Drawing.Point(306, 58); - this.FirstNameTextEdit.Name = "FirstNameTextEdit"; - this.FirstNameTextEdit.Properties.Mask.EditMask = "\\p{L}+"; - this.FirstNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx; - this.FirstNameTextEdit.Properties.Mask.ShowPlaceHolders = false; - this.FirstNameTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true; - this.FirstNameTextEdit.Size = new System.Drawing.Size(623, 20); - this.FirstNameTextEdit.StyleController = this.layoutControl1; - this.FirstNameTextEdit.TabIndex = 4; + // middleNameTextEdit + // + this.middleNameTextEdit.Location = new System.Drawing.Point(306, 138); + this.middleNameTextEdit.Name = "middleNameTextEdit"; + this.middleNameTextEdit.Properties.Mask.EditMask = "\\p{L}+"; + this.middleNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx; + this.middleNameTextEdit.Properties.Mask.ShowPlaceHolders = false; + this.middleNameTextEdit.Size = new System.Drawing.Size(623, 20); + this.middleNameTextEdit.StyleController = this.layoutControl1; + this.middleNameTextEdit.TabIndex = 6; + this.middleNameTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PersonalInfoTextEdit_InvalidValue); + this.middleNameTextEdit.Modified += new System.EventHandler(this.AnyTextEdit_Modified); + this.middleNameTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PersonalInfoTextEdit_Validating); + // + // lastNameTextEdit + // + this.lastNameTextEdit.Location = new System.Drawing.Point(306, 58); + this.lastNameTextEdit.Name = "lastNameTextEdit"; + this.lastNameTextEdit.Properties.Mask.EditMask = "\\p{L}+"; + this.lastNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx; + this.lastNameTextEdit.Properties.Mask.ShowPlaceHolders = false; + this.lastNameTextEdit.Size = new System.Drawing.Size(623, 20); + this.lastNameTextEdit.StyleController = this.layoutControl1; + this.lastNameTextEdit.TabIndex = 5; + this.lastNameTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PersonalInfoTextEdit_InvalidValue); + this.lastNameTextEdit.Modified += new System.EventHandler(this.AnyTextEdit_Modified); + this.lastNameTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PersonalInfoTextEdit_Validating); + // + // firstNameTextEdit + // + this.firstNameTextEdit.Location = new System.Drawing.Point(306, 98); + this.firstNameTextEdit.Name = "firstNameTextEdit"; + this.firstNameTextEdit.Properties.Mask.EditMask = "\\p{L}+"; + this.firstNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx; + this.firstNameTextEdit.Properties.Mask.ShowPlaceHolders = false; + this.firstNameTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true; + this.firstNameTextEdit.Size = new System.Drawing.Size(623, 20); + this.firstNameTextEdit.StyleController = this.layoutControl1; + this.firstNameTextEdit.TabIndex = 4; + this.firstNameTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PersonalInfoTextEdit_InvalidValue); + this.firstNameTextEdit.Modified += new System.EventHandler(this.AnyTextEdit_Modified); + this.firstNameTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PersonalInfoTextEdit_Validating); // // OldPasswordTextEdit // + this.OldPasswordTextEdit.CausesValidation = false; this.OldPasswordTextEdit.Location = new System.Drawing.Point(24, 98); this.OldPasswordTextEdit.Name = "OldPasswordTextEdit"; this.OldPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+"; @@ -209,65 +223,77 @@ private void InitializeComponent() this.loginTextEdit.Size = new System.Drawing.Size(254, 20); this.loginTextEdit.StyleController = this.layoutControl1; this.loginTextEdit.TabIndex = 1; - // - // NewPasswordTextEdit - // - this.NewPasswordTextEdit.Location = new System.Drawing.Point(24, 138); - this.NewPasswordTextEdit.Name = "NewPasswordTextEdit"; - this.NewPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+"; - this.NewPasswordTextEdit.Properties.Mask.ShowPlaceHolders = false; - this.NewPasswordTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true; - this.NewPasswordTextEdit.Properties.UseSystemPasswordChar = true; - this.NewPasswordTextEdit.Size = new System.Drawing.Size(254, 20); - this.NewPasswordTextEdit.StyleController = this.layoutControl1; - this.NewPasswordTextEdit.TabIndex = 3; - // - // ConfimPasswordTextEdit - // - this.ConfimPasswordTextEdit.Location = new System.Drawing.Point(24, 178); - this.ConfimPasswordTextEdit.Name = "ConfimPasswordTextEdit"; - this.ConfimPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+"; - this.ConfimPasswordTextEdit.Properties.Mask.ShowPlaceHolders = false; - this.ConfimPasswordTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true; - this.ConfimPasswordTextEdit.Properties.UseSystemPasswordChar = true; - this.ConfimPasswordTextEdit.Size = new System.Drawing.Size(254, 20); - this.ConfimPasswordTextEdit.StyleController = this.layoutControl1; - this.ConfimPasswordTextEdit.TabIndex = 4; - // - // SelectRoleComboBox - // - this.SelectRoleComboBox.Location = new System.Drawing.Point(306, 178); - this.SelectRoleComboBox.Name = "SelectRoleComboBox"; - this.SelectRoleComboBox.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + this.loginTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.loginTextEdit_InvalidValue); + this.loginTextEdit.Modified += new System.EventHandler(this.AnyPasswordTextEdit_Modified); + this.loginTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.loginTextEdit_Validating); + // + // newPasswordTextEdit + // + this.newPasswordTextEdit.Location = new System.Drawing.Point(24, 138); + this.newPasswordTextEdit.Name = "newPasswordTextEdit"; + this.newPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+"; + this.newPasswordTextEdit.Properties.Mask.ShowPlaceHolders = false; + this.newPasswordTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true; + this.newPasswordTextEdit.Properties.UseSystemPasswordChar = true; + this.newPasswordTextEdit.Size = new System.Drawing.Size(254, 20); + this.newPasswordTextEdit.StyleController = this.layoutControl1; + this.newPasswordTextEdit.TabIndex = 3; + this.newPasswordTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PasswordTextEdit_InvalidValue); + this.newPasswordTextEdit.Modified += new System.EventHandler(this.AnyPasswordTextEdit_Modified); + this.newPasswordTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PasswordTextEdit_Validating); + // + // confimPasswordTextEdit + // + this.confimPasswordTextEdit.Location = new System.Drawing.Point(24, 178); + this.confimPasswordTextEdit.Name = "confimPasswordTextEdit"; + this.confimPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+"; + this.confimPasswordTextEdit.Properties.Mask.ShowPlaceHolders = false; + this.confimPasswordTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true; + this.confimPasswordTextEdit.Properties.UseSystemPasswordChar = true; + this.confimPasswordTextEdit.Size = new System.Drawing.Size(254, 20); + this.confimPasswordTextEdit.StyleController = this.layoutControl1; + this.confimPasswordTextEdit.TabIndex = 4; + this.confimPasswordTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PasswordTextEdit_InvalidValue); + this.confimPasswordTextEdit.Modified += new System.EventHandler(this.AnyPasswordTextEdit_Modified); + this.confimPasswordTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PasswordTextEdit_Validating); + // + // selectRoleComboBox + // + this.selectRoleComboBox.Location = new System.Drawing.Point(306, 178); + this.selectRoleComboBox.Name = "selectRoleComboBox"; + this.selectRoleComboBox.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.SelectRoleComboBox.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; - this.SelectRoleComboBox.Size = new System.Drawing.Size(623, 20); - this.SelectRoleComboBox.StyleController = this.layoutControl1; - this.SelectRoleComboBox.TabIndex = 7; - // - // customerGroup - // - this.customerGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True; - this.customerGroup.GroupBordersVisible = false; - this.customerGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { - this.personalInfoGroup, - this.contactInfoGroup}); - this.customerGroup.Location = new System.Drawing.Point(0, 0); - this.customerGroup.Name = "Root"; - this.customerGroup.Size = new System.Drawing.Size(953, 522); - this.customerGroup.TextVisible = false; - // - // personalInfoGroup - // - this.personalInfoGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { + this.selectRoleComboBox.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; + this.selectRoleComboBox.Size = new System.Drawing.Size(623, 20); + this.selectRoleComboBox.StyleController = this.layoutControl1; + this.selectRoleComboBox.TabIndex = 7; + this.selectRoleComboBox.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.selectRoleComboBox_InvalidValue); + this.selectRoleComboBox.Modified += new System.EventHandler(this.AnyTextEdit_Modified); + this.selectRoleComboBox.Validating += new System.ComponentModel.CancelEventHandler(this.selectRoleComboBox_Validating); + // + // userGroup + // + this.userGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True; + this.userGroup.GroupBordersVisible = false; + this.userGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { + this.authInfoGroup, + this.personalInfoGroup}); + this.userGroup.Location = new System.Drawing.Point(0, 0); + this.userGroup.Name = "userGroup"; + this.userGroup.Size = new System.Drawing.Size(953, 522); + this.userGroup.TextVisible = false; + // + // authInfoGroup + // + this.authInfoGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { this.oldPasswordLayoutControlItem, this.loginLayoutControlItem, this.newPasswordLayoutControlItem, this.confimPasswordLayoutControlItem}); - this.personalInfoGroup.Location = new System.Drawing.Point(0, 0); - this.personalInfoGroup.Name = "personalInfoGroup"; - this.personalInfoGroup.Size = new System.Drawing.Size(282, 502); - this.personalInfoGroup.Text = "Данные авторизации"; + this.authInfoGroup.Location = new System.Drawing.Point(0, 0); + this.authInfoGroup.Name = "authInfoGroup"; + this.authInfoGroup.Size = new System.Drawing.Size(282, 502); + this.authInfoGroup.Text = "Данные авторизации"; // // oldPasswordLayoutControlItem // @@ -293,7 +319,7 @@ private void InitializeComponent() // // newPasswordLayoutControlItem // - this.newPasswordLayoutControlItem.Control = this.NewPasswordTextEdit; + this.newPasswordLayoutControlItem.Control = this.newPasswordTextEdit; this.newPasswordLayoutControlItem.CustomizationFormText = "Имя"; this.newPasswordLayoutControlItem.Location = new System.Drawing.Point(0, 80); this.newPasswordLayoutControlItem.Name = "newPasswordLayoutControlItem"; @@ -304,7 +330,7 @@ private void InitializeComponent() // // confimPasswordLayoutControlItem // - this.confimPasswordLayoutControlItem.Control = this.ConfimPasswordTextEdit; + this.confimPasswordLayoutControlItem.Control = this.confimPasswordTextEdit; this.confimPasswordLayoutControlItem.CustomizationFormText = "Имя"; this.confimPasswordLayoutControlItem.Location = new System.Drawing.Point(0, 120); this.confimPasswordLayoutControlItem.Name = "confimPasswordLayoutControlItem"; @@ -313,34 +339,24 @@ private void InitializeComponent() this.confimPasswordLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top; this.confimPasswordLayoutControlItem.TextSize = new System.Drawing.Size(109, 13); // - // contactInfoGroup + // personalInfoGroup // - this.contactInfoGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { - this.lastNameItem, + this.personalInfoGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { this.layoutControlItem2, this.middleNameItem, - this.layoutControlItem1, - this.IsActiveUserLayoutControl}); - this.contactInfoGroup.Location = new System.Drawing.Point(282, 0); - this.contactInfoGroup.Name = "contactInfoGroup"; - this.contactInfoGroup.Size = new System.Drawing.Size(651, 502); - this.contactInfoGroup.Text = "Личная информация"; - // - // lastNameItem - // - this.lastNameItem.Control = this.LastNameTextEdit; - this.lastNameItem.Location = new System.Drawing.Point(0, 40); - this.lastNameItem.Name = "lastNameItem"; - this.lastNameItem.Size = new System.Drawing.Size(627, 40); - this.lastNameItem.Text = "Фамилия"; - this.lastNameItem.TextLocation = DevExpress.Utils.Locations.Top; - this.lastNameItem.TextSize = new System.Drawing.Size(109, 13); + this.rol, + this.IsActiveUserLayoutControl, + this.lastNameItem}); + this.personalInfoGroup.Location = new System.Drawing.Point(282, 0); + this.personalInfoGroup.Name = "personalInfoGroup"; + this.personalInfoGroup.Size = new System.Drawing.Size(651, 502); + this.personalInfoGroup.Text = "Личная информация"; // // layoutControlItem2 // - this.layoutControlItem2.Control = this.FirstNameTextEdit; + this.layoutControlItem2.Control = this.firstNameTextEdit; this.layoutControlItem2.CustomizationFormText = "Имя"; - this.layoutControlItem2.Location = new System.Drawing.Point(0, 0); + this.layoutControlItem2.Location = new System.Drawing.Point(0, 40); this.layoutControlItem2.Name = "layoutControlItem2"; this.layoutControlItem2.Size = new System.Drawing.Size(627, 40); this.layoutControlItem2.Text = "Имя"; @@ -349,7 +365,7 @@ private void InitializeComponent() // // middleNameItem // - this.middleNameItem.Control = this.MiddleNameTextEdit; + this.middleNameItem.Control = this.middleNameTextEdit; this.middleNameItem.Location = new System.Drawing.Point(0, 80); this.middleNameItem.Name = "middleNameItem"; this.middleNameItem.Size = new System.Drawing.Size(627, 40); @@ -357,15 +373,15 @@ private void InitializeComponent() this.middleNameItem.TextLocation = DevExpress.Utils.Locations.Top; this.middleNameItem.TextSize = new System.Drawing.Size(109, 13); // - // layoutControlItem1 + // rol // - this.layoutControlItem1.Control = this.SelectRoleComboBox; - this.layoutControlItem1.Location = new System.Drawing.Point(0, 120); - this.layoutControlItem1.Name = "layoutControlItem1"; - this.layoutControlItem1.Size = new System.Drawing.Size(627, 40); - this.layoutControlItem1.Text = "Роль"; - this.layoutControlItem1.TextLocation = DevExpress.Utils.Locations.Top; - this.layoutControlItem1.TextSize = new System.Drawing.Size(109, 13); + this.rol.Control = this.selectRoleComboBox; + this.rol.Location = new System.Drawing.Point(0, 120); + this.rol.Name = "layoutControlItem1"; + this.rol.Size = new System.Drawing.Size(627, 40); + this.rol.Text = "Роль"; + this.rol.TextLocation = DevExpress.Utils.Locations.Top; + this.rol.TextSize = new System.Drawing.Size(109, 13); // // IsActiveUserLayoutControl // @@ -376,6 +392,26 @@ private void InitializeComponent() this.IsActiveUserLayoutControl.TextSize = new System.Drawing.Size(0, 0); this.IsActiveUserLayoutControl.TextVisible = false; // + // lastNameItem + // + this.lastNameItem.Control = this.lastNameTextEdit; + this.lastNameItem.Location = new System.Drawing.Point(0, 0); + this.lastNameItem.Name = "lastNameItem"; + this.lastNameItem.Size = new System.Drawing.Size(627, 40); + this.lastNameItem.Text = "Фамилия"; + this.lastNameItem.TextLocation = DevExpress.Utils.Locations.Top; + this.lastNameItem.TextSize = new System.Drawing.Size(109, 13); + // + // RoleLayoutControlItem + // + this.RoleLayoutControlItem.Control = this.selectRoleComboBox; + this.RoleLayoutControlItem.Location = new System.Drawing.Point(0, 120); + this.RoleLayoutControlItem.Name = "RoleLayoutControlItem"; + this.RoleLayoutControlItem.Size = new System.Drawing.Size(627, 40); + this.RoleLayoutControlItem.Text = "Роль"; + this.RoleLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top; + this.RoleLayoutControlItem.TextSize = new System.Drawing.Size(109, 13); + // // userEditBindingSource // this.userEditBindingSource.DataSource = typeof(ContosoUI.Users.Edit.UserEditPresenter); @@ -391,31 +427,33 @@ private void InitializeComponent() this.Name = "UserEditForm"; this.Ribbon = this.ribbonControl1; this.Text = "Пользователь"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.UserEditForm_FormClosing); this.Load += new System.EventHandler(this.UserEditForm_Load); ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit(); this.layoutControl1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.IsActiveUserCheckEdit.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.MiddleNameTextEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.LastNameTextEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.FirstNameTextEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.middleNameTextEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.lastNameTextEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.firstNameTextEdit.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.OldPasswordTextEdit.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.loginTextEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.NewPasswordTextEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ConfimPasswordTextEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.SelectRoleComboBox.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.customerGroup)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.personalInfoGroup)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.newPasswordTextEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.confimPasswordTextEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.selectRoleComboBox.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.userGroup)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.authInfoGroup)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.oldPasswordLayoutControlItem)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.loginLayoutControlItem)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.newPasswordLayoutControlItem)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.confimPasswordLayoutControlItem)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.contactInfoGroup)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.lastNameItem)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.personalInfoGroup)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.middleNameItem)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.rol)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.IsActiveUserLayoutControl)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.lastNameItem)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RoleLayoutControlItem)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.userEditBindingSource)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -425,25 +463,25 @@ private void InitializeComponent() #endregion private DevExpress.XtraLayout.LayoutControl layoutControl1; - private DevExpress.XtraLayout.LayoutControlGroup customerGroup; - private DevExpress.XtraEditors.TextEdit MiddleNameTextEdit; - private DevExpress.XtraEditors.TextEdit LastNameTextEdit; - private DevExpress.XtraLayout.LayoutControlGroup personalInfoGroup; + private DevExpress.XtraLayout.LayoutControlGroup userGroup; + private DevExpress.XtraEditors.TextEdit middleNameTextEdit; + private DevExpress.XtraEditors.TextEdit lastNameTextEdit; + private DevExpress.XtraLayout.LayoutControlGroup authInfoGroup; private DevExpress.XtraLayout.LayoutControlItem lastNameItem; private DevExpress.XtraLayout.LayoutControlItem middleNameItem; - private DevExpress.XtraLayout.LayoutControlGroup contactInfoGroup; + private DevExpress.XtraLayout.LayoutControlGroup personalInfoGroup; private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage; private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveOrEditribbonPageGroup; private DevExpress.XtraBars.BarButtonItem saveEditButtonItem; private DevExpress.XtraBars.Ribbon.RibbonControl ribbonControl1; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1; - private DevExpress.XtraEditors.TextEdit FirstNameTextEdit; + private DevExpress.XtraLayout.LayoutControlItem RoleLayoutControlItem; + private DevExpress.XtraEditors.TextEdit firstNameTextEdit; private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2; private DevExpress.XtraEditors.TextEdit OldPasswordTextEdit; private DevExpress.XtraEditors.TextEdit loginTextEdit; - private DevExpress.XtraEditors.TextEdit NewPasswordTextEdit; - private DevExpress.XtraEditors.TextEdit ConfimPasswordTextEdit; - private DevExpress.XtraEditors.ComboBoxEdit SelectRoleComboBox; + private DevExpress.XtraEditors.TextEdit newPasswordTextEdit; + private DevExpress.XtraEditors.TextEdit confimPasswordTextEdit; + private DevExpress.XtraEditors.ComboBoxEdit selectRoleComboBox; private DevExpress.XtraLayout.LayoutControlItem oldPasswordLayoutControlItem; private DevExpress.XtraLayout.LayoutControlItem loginLayoutControlItem; private DevExpress.XtraLayout.LayoutControlItem newPasswordLayoutControlItem; @@ -452,6 +490,7 @@ private void InitializeComponent() private DevExpress.XtraBars.BarButtonItem ChangePasswordBarBtn; private DevExpress.XtraEditors.CheckEdit IsActiveUserCheckEdit; private DevExpress.XtraLayout.LayoutControlItem IsActiveUserLayoutControl; + private DevExpress.XtraLayout.LayoutControlItem rol; } } \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.cs b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.cs index 62edcf7..df9f2c9 100644 --- a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.cs +++ b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.XtraBars; +using DevExpress.XtraEditors.Controls; namespace ContosoUI.Users.Edit { @@ -16,9 +17,10 @@ public partial class UserEditForm : DevExpress.XtraBars.Ribbon.RibbonForm UserEditPresenter presenter; public event EventHandler SaveBtnClick; public event EventHandler PasswordChange; + IUserNotify notifyManager = Program.MainWiewInstance; public string OldPassword { get { return OldPasswordTextEdit.Text; } } - public string NewPassword { get { return NewPasswordTextEdit.Text; } } + public string NewPassword { get { return newPasswordTextEdit.Text; } } public UserEditForm() { @@ -38,42 +40,172 @@ public UserEditForm(int id) } } + # region Validation + + private enum ValidLength + { + minLogin = 3, + maxLogin = 25, + minPassword = 5, + maxPassword = 40, + minPersonalInfo = 2, + maxPersonalInfo = 25 + } + + private void loginTextEdit_Validating(object sender, CancelEventArgs e) + { + var textEditControl = sender as DevExpress.XtraEditors.TextEdit; + var length = textEditControl.Text.Length; + if ((length < (int)ValidLength.minLogin || length > (int)ValidLength.maxLogin) && isPersonalInfoModified) + { + e.Cancel = true; + } + } + private void loginTextEdit_InvalidValue(object sender, DevExpress.XtraEditors.Controls.InvalidValueExceptionEventArgs e) + { + e.ErrorText = String.Format("Необходимо от {0} до {1} символов.", (int)ValidLength.minLogin, (int)ValidLength.maxLogin); + } + + private void PasswordTextEdit_Validating(object sender, CancelEventArgs e) + { + var textEditControl = sender as DevExpress.XtraEditors.TextEdit; + var length = textEditControl.Text.Length; + if ((length < (int)ValidLength.minPassword || length > (int)ValidLength.maxPassword) && isPasswordModified) + { + e.Cancel = true; + } + } + private void PasswordTextEdit_InvalidValue(object sender, InvalidValueExceptionEventArgs e) + { + e.ErrorText = String.Format("Необходимо от {0} до {1} символов.", (int)ValidLength.minPassword, (int)ValidLength.maxPassword); + } + + private void PersonalInfoTextEdit_Validating(object sender, CancelEventArgs e) + { + var textEditControl = sender as DevExpress.XtraEditors.TextEdit; + var length = textEditControl.Text.Length; + if ((length < (int)ValidLength.minPersonalInfo || length > (int)ValidLength.maxPersonalInfo) && isPersonalInfoModified) + { + e.Cancel = true; + } + } + private void PersonalInfoTextEdit_InvalidValue(object sender, InvalidValueExceptionEventArgs e) + { + e.ErrorText = String.Format("Необходимо от {0} до {1} символов.", (int)ValidLength.minPersonalInfo, (int)ValidLength.maxPersonalInfo); + } + + private void selectRoleComboBox_Validating(object sender, CancelEventArgs e) + { + var combo = sender as DevExpress.XtraEditors.ComboBoxEdit; + if (combo.SelectedItem == null || combo.SelectedItem.ToString() == null) + { + e.Cancel = true; + } + } + private void selectRoleComboBox_InvalidValue(object sender, InvalidValueExceptionEventArgs e) + { + e.ErrorText = "Выберите роль"; + } + # endregion + private void UserEditForm_Load(object sender, EventArgs e) { this.userEditBindingSource.DataSource = presenter; - FirstNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "FirstName"); - LastNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "LastName"); - MiddleNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "MiddleName"); + firstNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "FirstName"); + lastNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "LastName"); + middleNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "MiddleName"); loginTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "Login"); - SelectRoleComboBox.DataBindings.Add("EditValue", userEditBindingSource, "Role"); - SelectRoleComboBox.Properties.Items.AddRange(presenter.AllRoles); + selectRoleComboBox.DataBindings.Add("EditValue", userEditBindingSource, "Role"); + selectRoleComboBox.Properties.Items.AddRange(presenter.AllRoles); IsActiveUserCheckEdit.DataBindings.Add("EditValue", userEditBindingSource, "IsActive"); } + bool asPasswordChange = false; internal void AsPasswordChange() { - this.contactInfoGroup.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; + this.personalInfoGroup.HideToCustomization(); + asPasswordChange = true; + selectRoleComboBox.CausesValidation = false; + } + + private bool isPersonalInfoModified = false; + private bool isPasswordModified = false; + + private void AnyTextEdit_Modified(object sender, EventArgs e) + { + isPersonalInfoModified = true; + } + + private void AnyPasswordTextEdit_Modified(object sender, EventArgs e) + { + isPasswordModified = true; } private void saveEditButtonItem_ItemClick(object sender, ItemClickEventArgs e) { - if (loginTextEdit.Text!=String.Empty&&NewPasswordTextEdit.Text==ConfimPasswordTextEdit.Text) + if (newPasswordTextEdit.Text==confimPasswordTextEdit.Text&& + (firstNameTextEdit.Text!=String.Empty||asPasswordChange)&& + loginTextEdit.Text!= String.Empty) { + isPersonalInfoModified = false; + isPasswordModified = false; userEditBindingSource.EndEdit(); - SaveBtnClick.Invoke(sender, e); - if (NewPasswordTextEdit.Text!=String.Empty) + if (newPasswordTextEdit.Text!=String.Empty) { PasswordChange.Invoke(sender, e); } + SaveBtnClick.Invoke(sender, e); } else { - MessageBox.Show("Логин не введен или пароли не совпадают.", "Ошибка!"); + notifyManager.ShowError("Заполнены не все поля или пароли не совпадают.", "Ошибка!"); } } + + private void UserEditForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (isPersonalInfoModified || isPasswordModified) + { + if (notifyManager.ShowYesNo("Внимание, данные не сохранены!\n Вы уверены что хотите закрыть?", "Сообщение")) + { + e.Cancel = false; + } + else + { + e.Cancel = true; + } + } + else + { + e.Cancel = false; + } + } + + internal void UserUpdateDialog() + { + notifyManager.ShowInfo("Данные обновлены.", "Сообщеие"); + } + + internal void UserAddDialog() + { + notifyManager.ShowInfo("Новый пользователь добавлен.", "Сообщение"); + } + + internal void WrongLoginDialog() + { + notifyManager.ShowError("Пользовател с таким логином уже существует.", "Ошибка!"); + isPersonalInfoModified = true; + } + + internal void WrongPasswordDialog() + { + notifyManager.ShowError("Введен неверный пароль.", "Ошибка!"); + OldPasswordTextEdit.Text = String.Empty; + } } + } \ No newline at end of file diff --git a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditPresenter.cs b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditPresenter.cs index b6ea6d8..961e7bc 100644 --- a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditPresenter.cs +++ b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditPresenter.cs @@ -1,5 +1,6 @@ using ContosoUI.Authentication; -using Data.DumbData; +using ContosoUI.Presenter; +using Data.EFData; using Domain.DAO; using Domain.Entities; using System; @@ -12,24 +13,22 @@ namespace ContosoUI.Users.Edit { - class UserEditPresenter : BaseMD5, INotifyPropertyChanged + class UserEditPresenter : BasePresenter { User user = null; UserEditForm view = null; List roles = null; - IUserRepository model = new UserDao(); - IRoleRepository role = new RoleDao(); + UserRoleService model = new UserRoleService(); bool userIsFromBase = false; - public event PropertyChangedEventHandler PropertyChanged; public UserEditPresenter(UserEditForm view) { this.user = new User(); this.view = view; - this.roles = this.role.GetAll().ToList(); + this.roles = this.model.RoleDao.GetAll().ToList(); this.view.SaveBtnClick += new EventHandler(SaveBtnClickHandler); this.view.PasswordChange += new EventHandler(PasswordChangedHandler); } @@ -38,7 +37,7 @@ public UserEditPresenter(UserEditForm view) public UserEditPresenter(UserEditForm view, int id) : this(view) { - this.user = model.GetById(id); + this.user = model.UserDao.GetById(id); this.userIsFromBase = true; } @@ -46,45 +45,40 @@ private void SaveBtnClickHandler(object sender, EventArgs e) { if (userIsFromBase) { - model.Update(user); + model.UserDao.Update(user); + view.UserUpdateDialog(); } - else if (!model.GetAll().ToList().Any(x => x.Login == this.user.Login)) + else if (!model.UserDao.GetAll().ToList().Any(x => x.Login == this.user.Login)) { - model.Add(user); + model.UserDao.Add(user); + view.UserAddDialog(); } else { - MessageBox.Show("Пользователь с данным логином уже существует.", "Ошибка!"); + view.WrongLoginDialog(); } } private void PasswordChangedHandler(object sender, EventArgs e) { if (Program.AuthUser.Role.Permissions.Any(x => x.Type == Domain.PermissionType.EditUser) || - GetMd5Hash(view.OldPassword) == user.Password) + view.OldPassword.ToMD5() == user.Password) { - user.Password = GetMd5Hash(view.NewPassword); - } + user.Password = view.NewPassword.ToMD5(); + } else { - MessageBox.Show("Введен неверный пароль.", "Ошибка!"); + view.WrongPasswordDialog(); } } - private void NotifyPropertyChanged(String info) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(info)); - } - } public string FirstName { get { return user.PersonalInfo.FirstName; } set { - if (user.PersonalInfo.FirstName != value) + if (user.PersonalInfo.FirstName != value&&value != String.Empty) { user.PersonalInfo.FirstName = value; NotifyPropertyChanged("FirstName"); @@ -97,7 +91,7 @@ public string LastName get { return user.PersonalInfo.LastName; } set { - if (user.PersonalInfo.LastName != value) + if (user.PersonalInfo.LastName != value && value != String.Empty) { user.PersonalInfo.LastName = value; NotifyPropertyChanged("LastName"); @@ -110,7 +104,7 @@ public string MiddleName get { return user.PersonalInfo.MiddleName; } set { - if (user.PersonalInfo.MiddleName != value) + if (user.PersonalInfo.MiddleName != value && value != String.Empty) { user.PersonalInfo.MiddleName = value; NotifyPropertyChanged("MiddleName"); @@ -142,7 +136,7 @@ public Role Role get { return user.Role; } set { - if (user.Role != value) + if (user.Role != value&&value.Name!=String.Empty) { user.Role = value; NotifyPropertyChanged("Role"); diff --git a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.Designer.cs b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.Designer.cs index 73c47ad..0b946bd 100644 --- a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.Designer.cs +++ b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.Designer.cs @@ -83,8 +83,8 @@ private void InitializeComponent() this.colPersonalInfo.OptionsColumn.AllowFocus = false; this.colPersonalInfo.OptionsColumn.ReadOnly = true; this.colPersonalInfo.Visible = true; - this.colPersonalInfo.VisibleIndex = 0; - this.colPersonalInfo.Width = 257; + this.colPersonalInfo.VisibleIndex = 2; + this.colPersonalInfo.Width = 499; // // colRole // @@ -94,8 +94,8 @@ private void InitializeComponent() this.colRole.OptionsColumn.AllowFocus = false; this.colRole.OptionsColumn.ReadOnly = true; this.colRole.Visible = true; - this.colRole.VisibleIndex = 1; - this.colRole.Width = 143; + this.colRole.VisibleIndex = 0; + this.colRole.Width = 133; // // colLogin // @@ -105,8 +105,8 @@ private void InitializeComponent() this.colLogin.OptionsColumn.AllowFocus = false; this.colLogin.OptionsColumn.ReadOnly = true; this.colLogin.Visible = true; - this.colLogin.VisibleIndex = 2; - this.colLogin.Width = 195; + this.colLogin.VisibleIndex = 1; + this.colLogin.Width = 120; // // colId // @@ -114,9 +114,7 @@ private void InitializeComponent() this.colId.Name = "colId"; this.colId.OptionsColumn.AllowFocus = false; this.colId.OptionsColumn.ReadOnly = true; - this.colId.Visible = true; - this.colId.VisibleIndex = 3; - this.colId.Width = 89; + this.colId.Width = 85; // // colIsActive // @@ -126,8 +124,8 @@ private void InitializeComponent() this.colIsActive.OptionsColumn.AllowFocus = false; this.colIsActive.OptionsColumn.ReadOnly = true; this.colIsActive.Visible = true; - this.colIsActive.VisibleIndex = 4; - this.colIsActive.Width = 137; + this.colIsActive.VisibleIndex = 3; + this.colIsActive.Width = 115; // // colEditTime // @@ -137,8 +135,8 @@ private void InitializeComponent() this.colEditTime.OptionsColumn.AllowFocus = false; this.colEditTime.OptionsColumn.ReadOnly = true; this.colEditTime.Visible = true; - this.colEditTime.VisibleIndex = 5; - this.colEditTime.Width = 165; + this.colEditTime.VisibleIndex = 4; + this.colEditTime.Width = 119; // // UserReportGridControl // @@ -211,6 +209,7 @@ private void InitializeComponent() this.ribbonPageGroup1.ItemLinks.Add(this.barButtonGroup1); this.ribbonPageGroup1.ItemLinks.Add(this.userReportSaveBtn); this.ribbonPageGroup1.ItemLinks.Add(this.userReportPrintBtn); + this.ribbonPageGroup1.MergeOrder = 5; this.ribbonPageGroup1.Name = "ribbonPageGroup1"; this.ribbonPageGroup1.Text = "Сохранение"; // diff --git a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.resx b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.resx index f78321d..604c542 100644 --- a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.resx +++ b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.resx @@ -123,152 +123,152 @@ - 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 - f/QEgOiffNHExjV+0RkAAAAASUVORK5CYII= + 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 + GQAAAABJRU5ErkJggg== - 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 diff --git a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportPresenter.cs b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportPresenter.cs index 3fb643f..d2d847f 100644 --- a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportPresenter.cs +++ b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportPresenter.cs @@ -1,4 +1,4 @@ -using Data.DumbData; +using Data.EFData; using Domain.DAO; using Domain.Entities; using System; @@ -11,8 +11,8 @@ namespace ContosoUI.EditUserForm { class UserReportPresenter { - readonly UserReportForm view; - readonly IUserRepository model = new UserDao(); + UserReportForm view; + IUserRepository model = new UserDao(); List users = new List(); public List viewModels = new List(); diff --git a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportViewModel.cs b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportViewModel.cs index 5d082e9..ea11043 100644 --- a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportViewModel.cs +++ b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportViewModel.cs @@ -1,5 +1,4 @@ using Domain.Entities; -using Data.DumbData.tempDAO; using Domain.DAO; using System; using System.Collections.Generic; @@ -33,17 +32,7 @@ public string Role } public string IsActive { - get - { - if (user.IsActive) - { - return "Да"; - } - else - { - return "Нет"; - } - } + get { return string.Format(user.IsActive ? "Да" : "Нет");} } public int Id { diff --git a/Solution/ContosoProject/ContosoUI/packages.config b/Solution/ContosoProject/ContosoUI/packages.config index 9e8db31..4e57f9f 100644 --- a/Solution/ContosoProject/ContosoUI/packages.config +++ b/Solution/ContosoProject/ContosoUI/packages.config @@ -1,4 +1,6 @@  + + \ No newline at end of file diff --git a/Solution/ContosoProject/Data/App.config b/Solution/ContosoProject/Data/App.config index c115e7c..91a9335 100644 --- a/Solution/ContosoProject/Data/App.config +++ b/Solution/ContosoProject/Data/App.config @@ -3,14 +3,28 @@
+ - + - + + + + + + + + + + + + \ No newline at end of file diff --git a/Solution/ContosoProject/Data/Data.csproj b/Solution/ContosoProject/Data/Data.csproj index 62efb0f..cfa9d6c 100644 --- a/Solution/ContosoProject/Data/Data.csproj +++ b/Solution/ContosoProject/Data/Data.csproj @@ -38,9 +38,17 @@ ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll True + + ..\packages\EntityFramework.SqlServerCompact.6.1.3\lib\net45\EntityFramework.SqlServerCompact.dll + True + + + ..\packages\Microsoft.SqlServer.Compact.4.0.8876.1\lib\net40\System.Data.SqlServerCe.dll + True + @@ -49,8 +57,9 @@ - - + + + @@ -61,10 +70,12 @@ + + @@ -74,21 +85,26 @@ + - - - 201510291530109_Init.cs + + + + 201511031214147_Init.cs - - - 201511021009598_Second.cs + + + 201511031420293_Vbre.cs - + + Designer + + @@ -97,14 +113,21 @@ - - 201510291530109_Init.cs + + 201511031214147_Init.cs - - 201511021009598_Second.cs + + 201511031420293_Vbre.cs + + + if not exist "$(TargetDir)x86" md "$(TargetDir)x86" + xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\x86\*.*" "$(TargetDir)x86" + if not exist "$(TargetDir)amd64" md "$(TargetDir)amd64" + xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\amd64\*.*" "$(TargetDir)amd64" + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 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 - - - dbo - - \ No newline at end of file diff --git a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.cs b/Solution/ContosoProject/Data/Migrations/201511021009598_Second.cs deleted file mode 100644 index b72b168..0000000 --- a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Data.Migrations -{ - using System; - using System.Data.Entity.Migrations; - - public partial class Second : DbMigration - { - public override void Up() - { - AddColumn("dbo.PersonalInfoes", "IsActive", c => c.Boolean(nullable: false)); - AddColumn("dbo.PersonalInfoes", "EditTime", c => c.DateTime(nullable: false)); - } - - public override void Down() - { - DropColumn("dbo.PersonalInfoes", "EditTime"); - DropColumn("dbo.PersonalInfoes", "IsActive"); - } - } -} diff --git a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.resx b/Solution/ContosoProject/Data/Migrations/201511021009598_Second.resx deleted file mode 100644 index 21eee49..0000000 --- a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 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 - - - dbo - - \ No newline at end of file diff --git a/Solution/ContosoProject/Data/Migrations/201510291530109_Init.Designer.cs b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.Designer.cs similarity index 93% rename from Solution/ContosoProject/Data/Migrations/201510291530109_Init.Designer.cs rename to Solution/ContosoProject/Data/Migrations/201511031214147_Init.Designer.cs index 8a07f14..f66deeb 100644 --- a/Solution/ContosoProject/Data/Migrations/201510291530109_Init.Designer.cs +++ b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.Designer.cs @@ -13,7 +13,7 @@ public sealed partial class Init : IMigrationMetadata string IMigrationMetadata.Id { - get { return "201510291530109_Init"; } + get { return "201511031214147_Init"; } } string IMigrationMetadata.Source diff --git a/Solution/ContosoProject/Data/Migrations/201510291530109_Init.cs b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.cs similarity index 90% rename from Solution/ContosoProject/Data/Migrations/201510291530109_Init.cs rename to Solution/ContosoProject/Data/Migrations/201511031214147_Init.cs index b832f0c..9b89b02 100644 --- a/Solution/ContosoProject/Data/Migrations/201510291530109_Init.cs +++ b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.cs @@ -12,7 +12,7 @@ public override void Up() c => new { Id = c.Int(nullable: false, identity: true), - CategoryName = c.String(), + CategoryName = c.String(maxLength: 50), IsActive = c.Boolean(nullable: false), EditTime = c.DateTime(nullable: false), }) @@ -23,8 +23,8 @@ public override void Up() c => new { Id = c.Int(nullable: false, identity: true), - Name = c.String(), - SKU = c.String(), + Name = c.String(nullable: false, maxLength: 255), + SKU = c.String(nullable: false, maxLength: 50), Price = c.Double(nullable: false), Count = c.Int(nullable: false), IsActive = c.Boolean(nullable: false), @@ -40,7 +40,7 @@ public override void Up() c => new { Id = c.Int(nullable: false, identity: true), - Message = c.String(), + Message = c.String(maxLength: 2000), Type = c.Int(nullable: false), IsActive = c.Boolean(nullable: false), EditTime = c.DateTime(nullable: false), @@ -57,41 +57,40 @@ public override void Up() .Index(t => t.Order_Id); CreateTable( - "dbo.Customers", + "dbo.ContactInfoes", c => new { Id = c.Int(nullable: false, identity: true), + City = c.String(maxLength: 25), + Adress = c.String(maxLength: 100), + Telephone = c.String(maxLength: 15), + Email = c.String(maxLength: 40), IsActive = c.Boolean(nullable: false), EditTime = c.DateTime(nullable: false), - Contacts_Id = c.Int(), - PersonalInfo_Id = c.Int(), }) - .PrimaryKey(t => t.Id) - .ForeignKey("dbo.ContactInfoes", t => t.Contacts_Id) - .ForeignKey("dbo.PersonalInfoes", t => t.PersonalInfo_Id) - .Index(t => t.Contacts_Id) - .Index(t => t.PersonalInfo_Id); + .PrimaryKey(t => t.Id); CreateTable( - "dbo.ContactInfoes", + "dbo.Customers", c => new { Id = c.Int(nullable: false, identity: true), - City = c.String(), - Adress = c.String(), - Telephone = c.String(), - Email = c.String(), IsActive = c.Boolean(nullable: false), EditTime = c.DateTime(nullable: false), + Contacts_Id = c.Int(), + PersonalInfo_Id = c.Int(), }) - .PrimaryKey(t => t.Id); + .PrimaryKey(t => t.Id) + .ForeignKey("dbo.ContactInfoes", t => t.Contacts_Id) + .ForeignKey("dbo.PersonalInfoes", t => t.PersonalInfo_Id) + .Index(t => t.Contacts_Id) + .Index(t => t.PersonalInfo_Id); CreateTable( "dbo.Orders", c => new { Id = c.Int(nullable: false, identity: true), - TotalCost = c.Double(nullable: false), IsActive = c.Boolean(nullable: false), EditTime = c.DateTime(nullable: false), Customer_Id = c.Int(), @@ -127,7 +126,7 @@ public override void Up() c => new { Id = c.Int(nullable: false, identity: true), - Status = c.String(), + Status = c.String(maxLength: 4000), IsActive = c.Boolean(nullable: false), EditTime = c.DateTime(nullable: false), }) @@ -138,9 +137,11 @@ public override void Up() c => new { Id = c.Int(nullable: false, identity: true), - FirstName = c.String(), - MiddleName = c.String(), - LastName = c.String(), + FirstName = c.String(maxLength: 25), + MiddleName = c.String(maxLength: 25), + LastName = c.String(maxLength: 25), + IsActive = c.Boolean(nullable: false), + EditTime = c.DateTime(nullable: false), }) .PrimaryKey(t => t.Id); @@ -150,7 +151,7 @@ public override void Up() { Id = c.Int(nullable: false, identity: true), Type = c.Int(nullable: false), - Name = c.String(), + Name = c.String(maxLength: 120), IsActive = c.Boolean(nullable: false), EditTime = c.DateTime(nullable: false), }) @@ -161,7 +162,7 @@ public override void Up() c => new { Id = c.Int(nullable: false, identity: true), - Name = c.String(), + Name = c.String(maxLength: 50), IsActive = c.Boolean(nullable: false), EditTime = c.DateTime(nullable: false), }) @@ -172,8 +173,8 @@ public override void Up() c => new { Id = c.Int(nullable: false, identity: true), - Login = c.String(), - Password = c.String(), + Login = c.String(maxLength: 25), + Password = c.String(maxLength: 40), IsActive = c.Boolean(nullable: false), EditTime = c.DateTime(nullable: false), PersonalInfo_Id = c.Int(), @@ -238,8 +239,8 @@ public override void Down() DropTable("dbo.OrderStatus"); DropTable("dbo.GoodsRows"); DropTable("dbo.Orders"); - DropTable("dbo.ContactInfoes"); DropTable("dbo.Customers"); + DropTable("dbo.ContactInfoes"); DropTable("dbo.Comments"); DropTable("dbo.Goods"); DropTable("dbo.ProductCategories"); diff --git a/Solution/ContosoProject/Data/Migrations/201511031214147_Init.resx b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.resx new file mode 100644 index 0000000..c7ae81f --- /dev/null +++ b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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 + + + dbo + + \ No newline at end of file diff --git a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.Designer.cs b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.Designer.cs similarity index 82% rename from Solution/ContosoProject/Data/Migrations/201511021009598_Second.Designer.cs rename to Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.Designer.cs index 918cf7b..8c7d8b9 100644 --- a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.Designer.cs +++ b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.Designer.cs @@ -7,13 +7,13 @@ namespace Data.Migrations using System.Resources; [GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")] - public sealed partial class Second : IMigrationMetadata + public sealed partial class Vbre : IMigrationMetadata { - private readonly ResourceManager Resources = new ResourceManager(typeof(Second)); + private readonly ResourceManager Resources = new ResourceManager(typeof(Vbre)); string IMigrationMetadata.Id { - get { return "201511021009598_Second"; } + get { return "201511031420293_Vbre"; } } string IMigrationMetadata.Source diff --git a/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.cs b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.cs new file mode 100644 index 0000000..3af05be --- /dev/null +++ b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.cs @@ -0,0 +1,20 @@ +namespace Data.Migrations +{ + using System; + using System.Data.Entity.Migrations; + + public partial class Vbre : DbMigration + { + public override void Up() + { + DropColumn("dbo.GoodsRows", "Price"); + DropColumn("dbo.GoodsRows", "TotalPrice"); + } + + public override void Down() + { + AddColumn("dbo.GoodsRows", "TotalPrice", c => c.Double(nullable: false)); + AddColumn("dbo.GoodsRows", "Price", c => c.Double(nullable: false)); + } + } +} diff --git a/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.resx b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.resx new file mode 100644 index 0000000..e6548ff --- /dev/null +++ b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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 + + + dbo + + \ No newline at end of file diff --git a/Solution/ContosoProject/Data/Migrations/Configuration.cs b/Solution/ContosoProject/Data/Migrations/Configuration.cs index 1553c67..95c3d30 100644 --- a/Solution/ContosoProject/Data/Migrations/Configuration.cs +++ b/Solution/ContosoProject/Data/Migrations/Configuration.cs @@ -1,4 +1,4 @@ -namespace Data.Migrations +namespace Data.Migrations { using Domain.Entities; using System; @@ -11,45 +11,68 @@ internal sealed class Configuration : DbMigrationsConfiguration { - new Permission{Name = " ", Type = Domain.PermissionType.ListClient}, - new Permission{Name = " ", Type = Domain.PermissionType.NewClient}, - new Permission{Name = " ", Type = Domain.PermissionType.EditClient}, - new Permission{Name = " ", Type = Domain.PermissionType.ListOrder}, - new Permission{Name = " ", Type = Domain.PermissionType.NewOrder}, - new Permission{Name = " ", Type = Domain.PermissionType.EditOrder}, - new Permission{Name = " ", Type = Domain.PermissionType.ListGoods}, - new Permission{Name = " ", Type = Domain.PermissionType.NewGoods}, - new Permission{Name = " ", Type = Domain.PermissionType.EditGoods}, - new Permission{Name = " ", Type = Domain.PermissionType.ListUser}, - new Permission{Name = " ", Type = Domain.PermissionType.NewUser}, - new Permission{Name = " ", Type = Domain.PermissionType.EditUser}, - new Permission{Name = " ", Type = Domain.PermissionType.SaveListClients}, - new Permission{Name = " ", Type = Domain.PermissionType.SaveListOrders}, - new Permission{Name = " ", Type = Domain.PermissionType.SaveListGoods}, - new Permission{Name = " ", Type = Domain.PermissionType.SaveListUsers}, - new Permission{Name = " ", Type = Domain.PermissionType.PrintReportClients}, - new Permission{Name = " ", Type = Domain.PermissionType.PrintReportOrders}, - new Permission{Name = " ", Type = Domain.PermissionType.PrintReportGoods}, - new Permission{Name = " ", Type = Domain.PermissionType.PrintReportUsers}, - - new Permission{Name = " ", Type = Domain.PermissionType.ListRoles}, - new Permission{Name = " ", Type = Domain.PermissionType.NewRole}, - new Permission{Name = " ", Type = Domain.PermissionType.EditRole} + new Permission{Name = "Список клиентов", Type = Domain.PermissionType.ListClient}, + new Permission{Name = "Добавление клиента", Type = Domain.PermissionType.NewClient}, + new Permission{Name = "Редактирование клиента", Type = Domain.PermissionType.EditClient}, + new Permission{Name = "Список заказов", Type = Domain.PermissionType.ListOrder}, + new Permission{Name = "Новый заказ", Type = Domain.PermissionType.NewOrder}, + new Permission{Name = "Редактирование заказа", Type = Domain.PermissionType.EditOrder}, + new Permission{Name = "Список товаров", Type = Domain.PermissionType.ListGoods}, + new Permission{Name = "Новый товар", Type = Domain.PermissionType.NewGoods}, + new Permission{Name = "Редактирование товара", Type = Domain.PermissionType.EditGoods}, + new Permission{Name = "Список пользователей", Type = Domain.PermissionType.ListUser}, + new Permission{Name = "Новый пользователь", Type = Domain.PermissionType.NewUser}, + new Permission{Name = "Редактирование пользователя", Type = Domain.PermissionType.EditUser}, + new Permission{Name = "Сохранить список клиентов", Type = Domain.PermissionType.SaveListClients}, + new Permission{Name = "Сохранить список заказов", Type = Domain.PermissionType.SaveListOrders}, + new Permission{Name = "Сохранить список товаров", Type = Domain.PermissionType.SaveListGoods}, + new Permission{Name = "Сохранить список пользователей", Type = Domain.PermissionType.SaveListUsers}, + new Permission{Name = "Печатать отчет по клиентам", Type = Domain.PermissionType.PrintReportClients}, + new Permission{Name = "Печатать отчет по заказам", Type = Domain.PermissionType.PrintReportOrders}, + new Permission{Name = "Печатать отчет по товарам", Type = Domain.PermissionType.PrintReportGoods}, + new Permission{Name = "Печатать отчет по пользователям", Type = Domain.PermissionType.PrintReportUsers}, + + new Permission{Name = "Список ролей", Type = Domain.PermissionType.ListRoles}, + new Permission{Name = "Добавление роли", Type = Domain.PermissionType.NewRole}, + new Permission{Name = "Редактирование роли", Type = Domain.PermissionType.EditRole}, + new Permission{Name = "Редактирование категории товаров", Type = Domain.PermissionType.EditProductCategory} + }; + + var role = new Role { Name = "Администратор", Permissions = permissions }; + if (context.Roles.Count() == 0) + { + context.Roles.AddOrUpdate(x => x.Name, new Role[] { role }); + } + + var info = new PersonalInfo { FirstName = "Админ", LastName = "Админов", MiddleName = "Администраторович" }; + context.PersonalInfoes.AddOrUpdate(info); + var admin = new User { Login = "admin", Password = "21232f297a57a5a743894a0e4a801fc3", Role = role, PersonalInfo = info }; + + if (context.Users.Count() == 0) + { + context.Users.AddOrUpdate(x => x.Login, new User[] { admin }); + } + + var statuses = new List() + { + new OrderStatus() { Status = "Открыт"}, + new OrderStatus() { Status = "Оплачен"}, + new OrderStatus() { Status = "Готов"}, + new OrderStatus() { Status = "Отгружен"}, + new OrderStatus() { Status = "Закрыт"}, }; - - var role = new Role { Name = "Administrator", Permissions = permissions }; - context.Roles.AddOrUpdate(x => x.Name, new Role[]{role}); - var info = new PersonalInfo { FirstName = "admin", LastName = "admin", MiddleName = "admin" }; - var admin = new User { Login = "admin", Password = "admin", Role = role, PersonalInfo = info }; - context.Users.AddOrUpdate(x => x.Login, new User[]{admin}); + if (context.OrderStatus.Count() == 0) + { + context.OrderStatus.AddRange(statuses); + } context.SaveChanges(); } } diff --git a/Solution/ContosoProject/Data/Properties/DataSources/Domain.Entities.Order.datasource b/Solution/ContosoProject/Data/Properties/DataSources/Domain.Entities.Order.datasource new file mode 100644 index 0000000..683a1a2 --- /dev/null +++ b/Solution/ContosoProject/Data/Properties/DataSources/Domain.Entities.Order.datasource @@ -0,0 +1,10 @@ + + + + Domain.Entities.Order, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Solution/ContosoProject/Data/packages.config b/Solution/ContosoProject/Data/packages.config index 9e8db31..4e57f9f 100644 --- a/Solution/ContosoProject/Data/packages.config +++ b/Solution/ContosoProject/Data/packages.config @@ -1,4 +1,6 @@  + + \ No newline at end of file diff --git a/Solution/ContosoProject/DataBases/README.md b/Solution/ContosoProject/DataBases/README.md deleted file mode 100644 index bc55f44..0000000 --- a/Solution/ContosoProject/DataBases/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# CS1_Project -practic project for cs1 group diff --git a/Solution/ContosoProject/Domain/DAO/IDAO/IOrderRepository.cs b/Solution/ContosoProject/Domain/DAO/IDAO/IOrderRepository.cs index 8a559b7..7088f64 100644 --- a/Solution/ContosoProject/Domain/DAO/IDAO/IOrderRepository.cs +++ b/Solution/ContosoProject/Domain/DAO/IDAO/IOrderRepository.cs @@ -10,5 +10,6 @@ namespace Domain.DAO { public interface IOrderRepository : IRepository { + ICollection GetOrderByStatus(OrderStatus status); } } diff --git a/Solution/ContosoProject/Domain/DAO/IDAO/IOrderStstusRepository.cs b/Solution/ContosoProject/Domain/DAO/IDAO/IOrderStatusRepository.cs similarity index 71% rename from Solution/ContosoProject/Domain/DAO/IDAO/IOrderStstusRepository.cs rename to Solution/ContosoProject/Domain/DAO/IDAO/IOrderStatusRepository.cs index 3e6d43c..06247ca 100644 --- a/Solution/ContosoProject/Domain/DAO/IDAO/IOrderStstusRepository.cs +++ b/Solution/ContosoProject/Domain/DAO/IDAO/IOrderStatusRepository.cs @@ -7,7 +7,8 @@ namespace Domain.DAO { - public interface IOrderStstusRepository : IRepository + public interface IOrderStatusRepository : IRepository { + } } diff --git a/Solution/ContosoProject/Domain/DAO/IDAO/IProductCategoryRepository.cs b/Solution/ContosoProject/Domain/DAO/IDAO/IProductCategoryRepository.cs index 867c8e4..0fd7eda 100644 --- a/Solution/ContosoProject/Domain/DAO/IDAO/IProductCategoryRepository.cs +++ b/Solution/ContosoProject/Domain/DAO/IDAO/IProductCategoryRepository.cs @@ -9,5 +9,6 @@ namespace Domain.DAO { public interface IProductCategoryRepository : IRepository { + void AddOrUpdate(ProductCategory entity); } } diff --git a/Solution/ContosoProject/Domain/DAO/IDAO/IRoleRepository.cs b/Solution/ContosoProject/Domain/DAO/IDAO/IRoleRepository.cs index c27f7e4..0b303fd 100644 --- a/Solution/ContosoProject/Domain/DAO/IDAO/IRoleRepository.cs +++ b/Solution/ContosoProject/Domain/DAO/IDAO/IRoleRepository.cs @@ -10,5 +10,6 @@ namespace Domain.DAO { public interface IRoleRepository : IRepository { + void AddOrUpdate(Role role); } } diff --git a/Solution/ContosoProject/Domain/Domain.csproj b/Solution/ContosoProject/Domain/Domain.csproj index d44eded..f14daa4 100644 --- a/Solution/ContosoProject/Domain/Domain.csproj +++ b/Solution/ContosoProject/Domain/Domain.csproj @@ -31,6 +31,7 @@ + @@ -45,7 +46,7 @@ - + diff --git a/Solution/ContosoProject/Domain/Entities/BaseEntity.cs b/Solution/ContosoProject/Domain/Entities/BaseEntity.cs index 14f9385..1b148b9 100644 --- a/Solution/ContosoProject/Domain/Entities/BaseEntity.cs +++ b/Solution/ContosoProject/Domain/Entities/BaseEntity.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,6 +9,7 @@ namespace Domain.Entities { public abstract class BaseEntity { + [Key] public int Id { get; set; } public bool IsActive { get; set; } public DateTime EditTime { get; set; } diff --git a/Solution/ContosoProject/Domain/Entities/Comment.cs b/Solution/ContosoProject/Domain/Entities/Comment.cs index 99cbd5b..430d8f1 100644 --- a/Solution/ContosoProject/Domain/Entities/Comment.cs +++ b/Solution/ContosoProject/Domain/Entities/Comment.cs @@ -3,15 +3,18 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace Domain.Entities { - public class Comment:BaseEntity + public class Comment : BaseEntity { - - public string Message { get; set; } - - public CommentType Type { get; set; } - + [MaxLength(2000)] + public string Message { get; set; } + public CommentType Type { get; set; } + public override string ToString() + { + return Message; + } } } diff --git a/Solution/ContosoProject/Domain/Entities/ContactInfo.cs b/Solution/ContosoProject/Domain/Entities/ContactInfo.cs index c394f16..443a5e9 100644 --- a/Solution/ContosoProject/Domain/Entities/ContactInfo.cs +++ b/Solution/ContosoProject/Domain/Entities/ContactInfo.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,9 +9,16 @@ namespace Domain.Entities { public class ContactInfo: BaseEntity { + [MinLength(3), MaxLength(25)] public string City { get; set; } + + [MinLength(3), MaxLength(100)] public string Adress { get; set; } + + [MinLength(3), MaxLength(15)] public string Telephone { get; set; } + + [MinLength(3), MaxLength(40)] public string Email { get; set; } } } diff --git a/Solution/ContosoProject/Domain/Entities/Customer.cs b/Solution/ContosoProject/Domain/Entities/Customer.cs index 11adb69..6fd639d 100644 --- a/Solution/ContosoProject/Domain/Entities/Customer.cs +++ b/Solution/ContosoProject/Domain/Entities/Customer.cs @@ -3,15 +3,20 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace Domain.Entities { public class Customer : BaseEntity { public PersonalInfo PersonalInfo { get; set; } + public ContactInfo Contacts { get; set; } - public List Orders { get; set; } - public List Comments { get; set; } + + public virtual ICollection Orders { get; set; } + + public virtual ICollection Comments { get; set; } + public Customer() { Orders = new List(); @@ -19,5 +24,10 @@ public Customer() PersonalInfo = new PersonalInfo(); Contacts = new ContactInfo(); } + + public override string ToString() + { + return String.Format("{0} {1} {2}", PersonalInfo.LastName, PersonalInfo.FirstName, PersonalInfo.MiddleName); + } } } diff --git a/Solution/ContosoProject/Domain/Entities/Goods.cs b/Solution/ContosoProject/Domain/Entities/Goods.cs index 09ac624..82dc52b 100644 --- a/Solution/ContosoProject/Domain/Entities/Goods.cs +++ b/Solution/ContosoProject/Domain/Entities/Goods.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,17 +9,32 @@ namespace Domain.Entities { public class Goods: BaseEntity { + [Required] + [MaxLength(255)] public string Name { get; set; } + + [Required] + [MaxLength(50)] public string SKU { get; set; } + + [Required] public double Price { get; set; } + public int Count { get; set; } + public ProductCategory Category { get; set; } - public List Coments { get; set; } + + public virtual ICollection Coments { get; set; } + public Goods() { Coments = new List(); Category = new ProductCategory(); } + public override string ToString() + { + return Name + " " + Category.CategoryName; + } } } diff --git a/Solution/ContosoProject/Domain/Entities/GoodsRow.cs b/Solution/ContosoProject/Domain/Entities/GoodsRow.cs index 9f694ab..b16abed 100644 --- a/Solution/ContosoProject/Domain/Entities/GoodsRow.cs +++ b/Solution/ContosoProject/Domain/Entities/GoodsRow.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,21 +13,23 @@ public class GoodsRow : BaseEntity public Goods Goods { get; set; } public int Count { get; set; } public double Price { get; set; } - double totalPrise; + public double TotalPrice { get { - return totalPrise; - } - set - { - totalPrise = Price * Count; + return Goods.Price * Count; } } - public GoodsRow() { Goods = new Goods(); } - + public GoodsRow() + { + Goods = new Goods(); + } + public override string ToString() + { + return Goods.ToString() + " " + Convert.ToString(Count) + " " + Convert.ToString(TotalPrice); + } } } diff --git a/Solution/ContosoProject/Domain/Entities/Order.cs b/Solution/ContosoProject/Domain/Entities/Order.cs index 16e0206..85cdf98 100644 --- a/Solution/ContosoProject/Domain/Entities/Order.cs +++ b/Solution/ContosoProject/Domain/Entities/Order.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,10 +11,31 @@ namespace Domain.Entities public class Order : BaseEntity { public Customer Customer { get; set; } - public List GoodsList { get; set; } - public double TotalCost { get; set; } + + public virtual ICollection GoodsList { get; set; } + + [NotMapped] + public double TotalCost + { + get + { + double result = 0; + + foreach (GoodsRow row in GoodsList) + { + if (row.IsActive) + { + result += row.TotalPrice; + } + } + + return result; + } + } + public OrderStatus Status { get; set; } - public List Comments { get; set; } + + public virtual ICollection Comments { get; set; } public Order() { diff --git a/Solution/ContosoProject/Domain/Entities/OrderStatus.cs b/Solution/ContosoProject/Domain/Entities/OrderStatus.cs index d9c1a94..9d878ee 100644 --- a/Solution/ContosoProject/Domain/Entities/OrderStatus.cs +++ b/Solution/ContosoProject/Domain/Entities/OrderStatus.cs @@ -1,13 +1,23 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Domain.Entities { - public class OrderStatus:BaseEntity + public class OrderStatus : BaseEntity { public string Status { get; set; } + + public OrderStatus() + { + } + + public override string ToString() + { + return Status; + } } } diff --git a/Solution/ContosoProject/Domain/Entities/Permission.cs b/Solution/ContosoProject/Domain/Entities/Permission.cs index 10f3d4a..8930fc8 100644 --- a/Solution/ContosoProject/Domain/Entities/Permission.cs +++ b/Solution/ContosoProject/Domain/Entities/Permission.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,6 +10,8 @@ namespace Domain.Entities public class Permission : BaseEntity { public PermissionType Type { get; set; } + + [MinLength(3), MaxLength(120)] public string Name { get; set; } public virtual ICollection Roles { get; set; } diff --git a/Solution/ContosoProject/Domain/Entities/PersonalInfo.cs b/Solution/ContosoProject/Domain/Entities/PersonalInfo.cs index 0bd7e42..aa8bed8 100644 --- a/Solution/ContosoProject/Domain/Entities/PersonalInfo.cs +++ b/Solution/ContosoProject/Domain/Entities/PersonalInfo.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,8 +9,18 @@ namespace Domain.Entities { public class PersonalInfo : BaseEntity { + [MinLength(2), MaxLength(25)] public string FirstName { get; set; } + + [MinLength(2), MaxLength(25)] public string MiddleName { get; set; } + + [MinLength(2), MaxLength(25)] public string LastName { get; set; } + + public override string ToString() + { + return LastName + " " + FirstName + " " + MiddleName; + } } } diff --git a/Solution/ContosoProject/Domain/Entities/ProductCategory.cs b/Solution/ContosoProject/Domain/Entities/ProductCategory.cs index 59d29cb..f2fb585 100644 --- a/Solution/ContosoProject/Domain/Entities/ProductCategory.cs +++ b/Solution/ContosoProject/Domain/Entities/ProductCategory.cs @@ -1,18 +1,28 @@ -using System; +using Domain.DAO; +using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Domain.Entities { - public class ProductCategory: BaseEntity + public class ProductCategory : BaseEntity { + [MinLength(2), MaxLength(50)] public string CategoryName { get; set; } - public List Goods { get; set; } + + public virtual ICollection Goods { get; set; } + public ProductCategory() { Goods = new List(); } + + public override string ToString() + { + return CategoryName; + } } } diff --git a/Solution/ContosoProject/Domain/Entities/Role.cs b/Solution/ContosoProject/Domain/Entities/Role.cs index f1fe6e2..eef4b40 100644 --- a/Solution/ContosoProject/Domain/Entities/Role.cs +++ b/Solution/ContosoProject/Domain/Entities/Role.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,14 +9,17 @@ namespace Domain.Entities { public class Role : BaseEntity - { - public virtual ICollection Permissions { get; set; } + { + [MinLength(2), MaxLength(50)] public string Name { get; set; } + public virtual ICollection Permissions { get; set; } + public Role() { Permissions = new List(); } + public override string ToString() { return this.Name; diff --git a/Solution/ContosoProject/Domain/Entities/User.cs b/Solution/ContosoProject/Domain/Entities/User.cs index cd15d34..8954107 100644 --- a/Solution/ContosoProject/Domain/Entities/User.cs +++ b/Solution/ContosoProject/Domain/Entities/User.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,8 +10,13 @@ namespace Domain.Entities public class User : BaseEntity { public PersonalInfo PersonalInfo { get; set; } + public Role Role { get; set; } + + [MinLength(3), MaxLength(25)] public string Login { get; set; } + + [MinLength(5), MaxLength(40)] public string Password { get; set; } public User() diff --git a/Solution/ContosoProject/Domain/PermissionType.cs b/Solution/ContosoProject/Domain/PermissionType.cs index 6b6ee2a..098e7c3 100644 --- a/Solution/ContosoProject/Domain/PermissionType.cs +++ b/Solution/ContosoProject/Domain/PermissionType.cs @@ -38,6 +38,8 @@ public enum PermissionType PrintReportGoods = 22, PrintReportUsers = 23, + EditProductCategory = 24, + None = 0 } }