381 lines
15 KiB
C#
381 lines
15 KiB
C#
|
|
using Microsoft.AspNetCore.Mvc;
|
|||
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using WalkingTec.Mvvm.Core;
|
|||
|
|
using wtmProject.Controllers;
|
|||
|
|
using wtmProject.ViewModel._Admin.WTM_CONTRACTVMs;
|
|||
|
|
using wtmProject.Model;
|
|||
|
|
using wtmProject.DataAccess;
|
|||
|
|
|
|||
|
|
|
|||
|
|
namespace wtmProject.Test
|
|||
|
|
{
|
|||
|
|
[TestClass]
|
|||
|
|
public class WTM_CONTRACTApiTest
|
|||
|
|
{
|
|||
|
|
private WTM_CONTRACTController _controller;
|
|||
|
|
private string _seed;
|
|||
|
|
|
|||
|
|
public WTM_CONTRACTApiTest()
|
|||
|
|
{
|
|||
|
|
_seed = Guid.NewGuid().ToString();
|
|||
|
|
_controller = MockController.CreateApi<WTM_CONTRACTController>(new DataContext(_seed, DBTypeEnum.Memory), "user");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[TestMethod]
|
|||
|
|
public void SearchTest()
|
|||
|
|
{
|
|||
|
|
ContentResult rv = _controller.Search(new WTM_CONTRACTSearcher()) as ContentResult;
|
|||
|
|
Assert.IsTrue(string.IsNullOrEmpty(rv.Content)==false);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[TestMethod]
|
|||
|
|
public void CreateTest()
|
|||
|
|
{
|
|||
|
|
WTM_CONTRACTVM vm = _controller.Wtm.CreateVM<WTM_CONTRACTVM>();
|
|||
|
|
WTM_CONTRACT v = new WTM_CONTRACT();
|
|||
|
|
|
|||
|
|
v.CustomId = AddWTM_CUSTOM();
|
|||
|
|
v.CustomClass = wtmProject.Model.CustomClassEnum.Inside;
|
|||
|
|
v.AreaId = AddWTM_AREA();
|
|||
|
|
v.VisitObjectId = AddWTM_CUSTOM_PERSON();
|
|||
|
|
v.MarkManageId = AddFrameworkUser();
|
|||
|
|
v.ProjectId = AddWTM_PROJECT();
|
|||
|
|
v.ContractName = "GuUPpCoSUm0acPdhfE6rFZxEC4l5o0o";
|
|||
|
|
v.ContractCode = "hIytVohSedZtoXokbG07r5Uim0TULgqliC1RyekjTYv2AfR21nNavWa7I2JaTG9wO2rojDYGfWK0g";
|
|||
|
|
v.SignDate = DateTime.Parse("2023-10-27 15:33:34");
|
|||
|
|
v.ContractAmount = 79;
|
|||
|
|
v.CostAmount = 72;
|
|||
|
|
v.ContractCycle = wtmProject.Model.ContractCycleEnum.ThirdCycle;
|
|||
|
|
v.ProjectManageId = AddFrameworkUser();
|
|||
|
|
v.GrossProfitMargin = "FA4jQDJJLX5IttsaomaVy7kWu6mnBL2lFWyClH";
|
|||
|
|
vm.Entity = v;
|
|||
|
|
var rv = _controller.Add(vm);
|
|||
|
|
Assert.IsInstanceOfType(rv, typeof(OkObjectResult));
|
|||
|
|
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
var data = context.Set<WTM_CONTRACT>().Find(v.ID);
|
|||
|
|
|
|||
|
|
Assert.AreEqual(data.CustomClass, wtmProject.Model.CustomClassEnum.Inside);
|
|||
|
|
Assert.AreEqual(data.ContractName, "GuUPpCoSUm0acPdhfE6rFZxEC4l5o0o");
|
|||
|
|
Assert.AreEqual(data.ContractCode, "hIytVohSedZtoXokbG07r5Uim0TULgqliC1RyekjTYv2AfR21nNavWa7I2JaTG9wO2rojDYGfWK0g");
|
|||
|
|
Assert.AreEqual(data.SignDate, DateTime.Parse("2023-10-27 15:33:34"));
|
|||
|
|
Assert.AreEqual(data.ContractAmount, 79);
|
|||
|
|
Assert.AreEqual(data.CostAmount, 72);
|
|||
|
|
Assert.AreEqual(data.ContractCycle, wtmProject.Model.ContractCycleEnum.ThirdCycle);
|
|||
|
|
Assert.AreEqual(data.GrossProfitMargin, "FA4jQDJJLX5IttsaomaVy7kWu6mnBL2lFWyClH");
|
|||
|
|
Assert.AreEqual(data.CreateBy, "user");
|
|||
|
|
Assert.IsTrue(DateTime.Now.Subtract(data.CreateTime.Value).Seconds < 10);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[TestMethod]
|
|||
|
|
public void EditTest()
|
|||
|
|
{
|
|||
|
|
WTM_CONTRACT v = new WTM_CONTRACT();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
v.CustomId = AddWTM_CUSTOM();
|
|||
|
|
v.CustomClass = wtmProject.Model.CustomClassEnum.Inside;
|
|||
|
|
v.AreaId = AddWTM_AREA();
|
|||
|
|
v.VisitObjectId = AddWTM_CUSTOM_PERSON();
|
|||
|
|
v.MarkManageId = AddFrameworkUser();
|
|||
|
|
v.ProjectId = AddWTM_PROJECT();
|
|||
|
|
v.ContractName = "GuUPpCoSUm0acPdhfE6rFZxEC4l5o0o";
|
|||
|
|
v.ContractCode = "hIytVohSedZtoXokbG07r5Uim0TULgqliC1RyekjTYv2AfR21nNavWa7I2JaTG9wO2rojDYGfWK0g";
|
|||
|
|
v.SignDate = DateTime.Parse("2023-10-27 15:33:34");
|
|||
|
|
v.ContractAmount = 79;
|
|||
|
|
v.CostAmount = 72;
|
|||
|
|
v.ContractCycle = wtmProject.Model.ContractCycleEnum.ThirdCycle;
|
|||
|
|
v.ProjectManageId = AddFrameworkUser();
|
|||
|
|
v.GrossProfitMargin = "FA4jQDJJLX5IttsaomaVy7kWu6mnBL2lFWyClH";
|
|||
|
|
context.Set<WTM_CONTRACT>().Add(v);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WTM_CONTRACTVM vm = _controller.Wtm.CreateVM<WTM_CONTRACTVM>();
|
|||
|
|
var oldID = v.ID;
|
|||
|
|
v = new WTM_CONTRACT();
|
|||
|
|
v.ID = oldID;
|
|||
|
|
|
|||
|
|
v.CustomClass = wtmProject.Model.CustomClassEnum.Inside;
|
|||
|
|
v.ContractName = "ZLqSZU0IvuR4SmUpyxvRGCqrAkTjYszyEKunjfqrts4G7TobRAcr4pjLbq83eSuUj";
|
|||
|
|
v.ContractCode = "s8Bf4IOCzEyf15RegORRzFoUqkPCPSxoEIqi8kgm";
|
|||
|
|
v.SignDate = DateTime.Parse("2024-09-03 15:33:34");
|
|||
|
|
v.ContractAmount = 35;
|
|||
|
|
v.CostAmount = 3;
|
|||
|
|
v.ContractCycle = wtmProject.Model.ContractCycleEnum.ThirdCycle;
|
|||
|
|
v.GrossProfitMargin = "lDLkYKzgOOhtFx";
|
|||
|
|
vm.Entity = v;
|
|||
|
|
vm.FC = new Dictionary<string, object>();
|
|||
|
|
|
|||
|
|
vm.FC.Add("Entity.CustomId", "");
|
|||
|
|
vm.FC.Add("Entity.CustomClass", "");
|
|||
|
|
vm.FC.Add("Entity.AreaId", "");
|
|||
|
|
vm.FC.Add("Entity.VisitObjectId", "");
|
|||
|
|
vm.FC.Add("Entity.MarkManageId", "");
|
|||
|
|
vm.FC.Add("Entity.ProjectId", "");
|
|||
|
|
vm.FC.Add("Entity.ContractName", "");
|
|||
|
|
vm.FC.Add("Entity.ContractCode", "");
|
|||
|
|
vm.FC.Add("Entity.SignDate", "");
|
|||
|
|
vm.FC.Add("Entity.ContractAmount", "");
|
|||
|
|
vm.FC.Add("Entity.CostAmount", "");
|
|||
|
|
vm.FC.Add("Entity.ContractCycle", "");
|
|||
|
|
vm.FC.Add("Entity.ProjectManageId", "");
|
|||
|
|
vm.FC.Add("Entity.GrossProfitMargin", "");
|
|||
|
|
var rv = _controller.Edit(vm);
|
|||
|
|
Assert.IsInstanceOfType(rv, typeof(OkObjectResult));
|
|||
|
|
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
var data = context.Set<WTM_CONTRACT>().Find(v.ID);
|
|||
|
|
|
|||
|
|
Assert.AreEqual(data.CustomClass, wtmProject.Model.CustomClassEnum.Inside);
|
|||
|
|
Assert.AreEqual(data.ContractName, "ZLqSZU0IvuR4SmUpyxvRGCqrAkTjYszyEKunjfqrts4G7TobRAcr4pjLbq83eSuUj");
|
|||
|
|
Assert.AreEqual(data.ContractCode, "s8Bf4IOCzEyf15RegORRzFoUqkPCPSxoEIqi8kgm");
|
|||
|
|
Assert.AreEqual(data.SignDate, DateTime.Parse("2024-09-03 15:33:34"));
|
|||
|
|
Assert.AreEqual(data.ContractAmount, 35);
|
|||
|
|
Assert.AreEqual(data.CostAmount, 3);
|
|||
|
|
Assert.AreEqual(data.ContractCycle, wtmProject.Model.ContractCycleEnum.ThirdCycle);
|
|||
|
|
Assert.AreEqual(data.GrossProfitMargin, "lDLkYKzgOOhtFx");
|
|||
|
|
Assert.AreEqual(data.UpdateBy, "user");
|
|||
|
|
Assert.IsTrue(DateTime.Now.Subtract(data.UpdateTime.Value).Seconds < 10);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[TestMethod]
|
|||
|
|
public void GetTest()
|
|||
|
|
{
|
|||
|
|
WTM_CONTRACT v = new WTM_CONTRACT();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
v.CustomId = AddWTM_CUSTOM();
|
|||
|
|
v.CustomClass = wtmProject.Model.CustomClassEnum.Inside;
|
|||
|
|
v.AreaId = AddWTM_AREA();
|
|||
|
|
v.VisitObjectId = AddWTM_CUSTOM_PERSON();
|
|||
|
|
v.MarkManageId = AddFrameworkUser();
|
|||
|
|
v.ProjectId = AddWTM_PROJECT();
|
|||
|
|
v.ContractName = "GuUPpCoSUm0acPdhfE6rFZxEC4l5o0o";
|
|||
|
|
v.ContractCode = "hIytVohSedZtoXokbG07r5Uim0TULgqliC1RyekjTYv2AfR21nNavWa7I2JaTG9wO2rojDYGfWK0g";
|
|||
|
|
v.SignDate = DateTime.Parse("2023-10-27 15:33:34");
|
|||
|
|
v.ContractAmount = 79;
|
|||
|
|
v.CostAmount = 72;
|
|||
|
|
v.ContractCycle = wtmProject.Model.ContractCycleEnum.ThirdCycle;
|
|||
|
|
v.ProjectManageId = AddFrameworkUser();
|
|||
|
|
v.GrossProfitMargin = "FA4jQDJJLX5IttsaomaVy7kWu6mnBL2lFWyClH";
|
|||
|
|
context.Set<WTM_CONTRACT>().Add(v);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
var rv = _controller.Get(v.ID.ToString());
|
|||
|
|
Assert.IsNotNull(rv);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[TestMethod]
|
|||
|
|
public void BatchDeleteTest()
|
|||
|
|
{
|
|||
|
|
WTM_CONTRACT v1 = new WTM_CONTRACT();
|
|||
|
|
WTM_CONTRACT v2 = new WTM_CONTRACT();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
v1.CustomId = AddWTM_CUSTOM();
|
|||
|
|
v1.CustomClass = wtmProject.Model.CustomClassEnum.Inside;
|
|||
|
|
v1.AreaId = AddWTM_AREA();
|
|||
|
|
v1.VisitObjectId = AddWTM_CUSTOM_PERSON();
|
|||
|
|
v1.MarkManageId = AddFrameworkUser();
|
|||
|
|
v1.ProjectId = AddWTM_PROJECT();
|
|||
|
|
v1.ContractName = "GuUPpCoSUm0acPdhfE6rFZxEC4l5o0o";
|
|||
|
|
v1.ContractCode = "hIytVohSedZtoXokbG07r5Uim0TULgqliC1RyekjTYv2AfR21nNavWa7I2JaTG9wO2rojDYGfWK0g";
|
|||
|
|
v1.SignDate = DateTime.Parse("2023-10-27 15:33:34");
|
|||
|
|
v1.ContractAmount = 79;
|
|||
|
|
v1.CostAmount = 72;
|
|||
|
|
v1.ContractCycle = wtmProject.Model.ContractCycleEnum.ThirdCycle;
|
|||
|
|
v1.ProjectManageId = AddFrameworkUser();
|
|||
|
|
v1.GrossProfitMargin = "FA4jQDJJLX5IttsaomaVy7kWu6mnBL2lFWyClH";
|
|||
|
|
v2.CustomId = v1.CustomId;
|
|||
|
|
v2.CustomClass = wtmProject.Model.CustomClassEnum.Inside;
|
|||
|
|
v2.AreaId = v1.AreaId;
|
|||
|
|
v2.VisitObjectId = v1.VisitObjectId;
|
|||
|
|
v2.MarkManageId = v1.MarkManageId;
|
|||
|
|
v2.ProjectId = v1.ProjectId;
|
|||
|
|
v2.ContractName = "ZLqSZU0IvuR4SmUpyxvRGCqrAkTjYszyEKunjfqrts4G7TobRAcr4pjLbq83eSuUj";
|
|||
|
|
v2.ContractCode = "s8Bf4IOCzEyf15RegORRzFoUqkPCPSxoEIqi8kgm";
|
|||
|
|
v2.SignDate = DateTime.Parse("2024-09-03 15:33:34");
|
|||
|
|
v2.ContractAmount = 35;
|
|||
|
|
v2.CostAmount = 3;
|
|||
|
|
v2.ContractCycle = wtmProject.Model.ContractCycleEnum.ThirdCycle;
|
|||
|
|
v2.ProjectManageId = v1.ProjectManageId;
|
|||
|
|
v2.GrossProfitMargin = "lDLkYKzgOOhtFx";
|
|||
|
|
context.Set<WTM_CONTRACT>().Add(v1);
|
|||
|
|
context.Set<WTM_CONTRACT>().Add(v2);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var rv = _controller.BatchDelete(new string[] { v1.ID.ToString(), v2.ID.ToString() });
|
|||
|
|
Assert.IsInstanceOfType(rv, typeof(OkObjectResult));
|
|||
|
|
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
var data1 = context.Set<WTM_CONTRACT>().Find(v1.ID);
|
|||
|
|
var data2 = context.Set<WTM_CONTRACT>().Find(v2.ID);
|
|||
|
|
Assert.AreEqual(data1, null);
|
|||
|
|
Assert.AreEqual(data2, null);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
rv = _controller.BatchDelete(new string[] {});
|
|||
|
|
Assert.IsInstanceOfType(rv, typeof(OkResult));
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private Guid AddWTM_AREA()
|
|||
|
|
{
|
|||
|
|
WTM_AREA v = new WTM_AREA();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
try{
|
|||
|
|
|
|||
|
|
v.AreaCode = "EbJmhTsfbwc4eD";
|
|||
|
|
v.AreaName = "MfFEZAVqdZDPVVx2UPEowUy";
|
|||
|
|
context.Set<WTM_AREA>().Add(v);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
catch{}
|
|||
|
|
}
|
|||
|
|
return v.ID;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private Guid AddWTM_CUSTOM()
|
|||
|
|
{
|
|||
|
|
WTM_CUSTOM v = new WTM_CUSTOM();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
try{
|
|||
|
|
|
|||
|
|
v.CustomAllName = "zEubt9fNFYIcPM8Z0GDt";
|
|||
|
|
v.CustomShortName = "XgnO5POVIOO6RbkvdY9";
|
|||
|
|
v.ParentUnit = "dbooTcBir8WLUYJEyRac9kww0Bwv7jJLyN";
|
|||
|
|
v.AreaId = AddWTM_AREA();
|
|||
|
|
v.EnterprisesType = wtmProject.Model.EnterprisesTypeEnum.Center;
|
|||
|
|
v.IndustryType = wtmProject.Model.IndustryTypeEnum.Tungsten;
|
|||
|
|
v.CustomClass = wtmProject.Model.CustomClassEnum.OutSide;
|
|||
|
|
context.Set<WTM_CUSTOM>().Add(v);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
catch{}
|
|||
|
|
}
|
|||
|
|
return v.ID;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private Guid AddWTM_CUSTOM_PERSON()
|
|||
|
|
{
|
|||
|
|
WTM_CUSTOM_PERSON v = new WTM_CUSTOM_PERSON();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
try{
|
|||
|
|
|
|||
|
|
v.CustomId = AddWTM_CUSTOM();
|
|||
|
|
v.PersonName = "SYI6iqVL89ASNRo";
|
|||
|
|
v.PersonPhone = "luQKGjMsIeXXxBJ26";
|
|||
|
|
v.PersonPost = "hJPls2Dv1L81AsEXZC";
|
|||
|
|
context.Set<WTM_CUSTOM_PERSON>().Add(v);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
catch{}
|
|||
|
|
}
|
|||
|
|
return v.ID;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private Guid AddFrameworkGroup()
|
|||
|
|
{
|
|||
|
|
FrameworkGroup v = new FrameworkGroup();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
try{
|
|||
|
|
|
|||
|
|
v.GroupCode = "DRMi6ADhMd1Cq1kswdNS0Ll9cdNW6o4g9l";
|
|||
|
|
v.GroupName = "gfZKTPT7Y6B7lAEutQS4idUXR4WM";
|
|||
|
|
v.GroupRemark = "sRThuSfRY";
|
|||
|
|
v.Manager = "UJjDcpZAt";
|
|||
|
|
context.Set<FrameworkGroup>().Add(v);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
catch{}
|
|||
|
|
}
|
|||
|
|
return v.ID;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private Guid AddFileAttachment()
|
|||
|
|
{
|
|||
|
|
FileAttachment v = new FileAttachment();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
try{
|
|||
|
|
|
|||
|
|
v.FileName = "A4BCst4p1sL1BA8g";
|
|||
|
|
v.FileExt = "hUE";
|
|||
|
|
v.Path = "4";
|
|||
|
|
v.Length = 59;
|
|||
|
|
v.UploadTime = DateTime.Parse("2023-09-27 15:33:34");
|
|||
|
|
v.SaveMode = "d0k";
|
|||
|
|
v.ExtraInfo = "h9gtsLoR7VWtjJGW";
|
|||
|
|
v.HandlerInfo = "ni";
|
|||
|
|
context.Set<FileAttachment>().Add(v);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
catch{}
|
|||
|
|
}
|
|||
|
|
return v.ID;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private Guid AddFrameworkUser()
|
|||
|
|
{
|
|||
|
|
FrameworkUser v = new FrameworkUser();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
try{
|
|||
|
|
|
|||
|
|
v.Gender = WalkingTec.Mvvm.Core.GenderEnum.Male;
|
|||
|
|
v.CellPhone = "P";
|
|||
|
|
v.GroupId = AddFrameworkGroup();
|
|||
|
|
v.DisplayOrder = 85;
|
|||
|
|
v.ITCode = "h1KPnxtVFUwopGKFFQiwl02XHU9sqlFcNGmWAGDKpC5vph1iw";
|
|||
|
|
v.Password = "hjgpaQ";
|
|||
|
|
v.Name = "dbSx4LBgahMk54qLjUmui3KoXNTupW";
|
|||
|
|
v.IsValid = false;
|
|||
|
|
v.PhotoId = AddFileAttachment();
|
|||
|
|
context.Set<FrameworkUser>().Add(v);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
catch{}
|
|||
|
|
}
|
|||
|
|
return v.ID;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private Guid AddWTM_PROJECT()
|
|||
|
|
{
|
|||
|
|
WTM_PROJECT v = new WTM_PROJECT();
|
|||
|
|
using (var context = new DataContext(_seed, DBTypeEnum.Memory))
|
|||
|
|
{
|
|||
|
|
try{
|
|||
|
|
|
|||
|
|
v.ProjectCode = "IlRMtfFs46O31";
|
|||
|
|
v.ProjectName = "bDMgH2PovARvOQ3sp0jgav0wr";
|
|||
|
|
context.Set<WTM_PROJECT>().Add(v);
|
|||
|
|
context.SaveChanges();
|
|||
|
|
}
|
|||
|
|
catch{}
|
|||
|
|
}
|
|||
|
|
return v.ID;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|