Пример #1
0
            public static MProject_Project MProject_Project(ProjectSnapshot dbProjectSnapshot)
            {
                var projectSpecificationComponents = new List <MProject_ProjectSpecificationComponent>();

                foreach (var dbProjectSnapshotComponent in dbProjectSnapshot.ProjectSnapshotComponents.ToList())
                {
                    projectSpecificationComponents.Add(
                        new MProject_ProjectSpecificationComponent(
                            dbProjectSnapshotComponent.ConsumableReference,
                            dbProjectSnapshotComponent.UnitOfMeasureCode,
                            dbProjectSnapshotComponent.Quantity));
                }

                var projectSpecification = new MProject_ProjectSpecification(
                    dbProjectSnapshot.DesignSnapshot.Artifact.Value,
                    dbProjectSnapshot.Artifact.ArtifactTypeCode,
                    dbProjectSnapshot.Artifact.ArtifactValueTypeCode,
                    dbProjectSnapshot.Artifact.Value,
                    projectSpecificationComponents);

                var project = new MProject_Project(
                    dbProjectSnapshot.ProjectId,
                    dbProjectSnapshot.ProjectSnapshotId,
                    dbProjectSnapshot.Name,
                    dbProjectSnapshot.UpdateDateTimeUtc,
                    projectSpecification);

                return(project);
            }
Пример #2
0
            public static MProject_Project Create_MProject_Project(Guid projectId, long projectSnapshotId, string name, DateTime updateDateTimeUtc, string designArtifactValue, string projectArtifcatTypeCode, string projectArtifactValueTypeCode, string projectArtifactValue)
            {
                var projectSpecification = new MProject_ProjectSpecification(
                    designArtifactValue,
                    projectArtifcatTypeCode,
                    projectArtifactValueTypeCode,
                    projectArtifactValue,
                    new List <MProject_ProjectSpecificationComponent>());

                var project = new MProject_Project(
                    projectId,
                    projectSnapshotId,
                    name,
                    updateDateTimeUtc,
                    projectSpecification);

                return(project);
            }
        public static MProject_ProjectSpecification CreateProjectSpecification(Kit kit)
        {
            var projectComponents = new List <MProject_ProjectSpecificationComponent>();

            foreach (var kitPart in kit.Parts)
            {
                projectComponents.Add(
                    new MProject_ProjectSpecificationComponent(kitPart.Sku, GetUnitOfMeasureCode(kitPart.AreaSize), kitPart.Quantity));
            }

            var projectSpecification = new MProject_ProjectSpecification(
                null,
                ArtifactTypeCodes.Kit,
                ArtifactValueTypeCodes.Json,
                kit.JsonSave().ToString(),
                projectComponents);

            return(projectSpecification);
        }
Пример #4
0
        public async Task <bool> UpdateProjectAsync(Guid projectId, MProject_ProjectSpecification projectSpecification, DateTime utcNow)
        {
            //if (SecurityPolicy.IsBuiltInUser(userId))
            //{
            //    throw new InvalidOperationException("Built-in user ID not supported.");
            //}

            try
            {
                using var ctx = QuiltContextFactory.Create();

                var dbProject = await ctx.Projects.Where(r => r.ProjectId == projectId).SingleOrDefaultAsync().ConfigureAwait(false);

                if (dbProject == null)
                {
                    return(false);
                }

                //var ownerUserId = ParseUserId.FromOwnerReference(dbProject.Owner.OwnerReference);
                //if (!SecurityPolicy.IsAuthorized(userId, ownerUserId))
                //{
                //    return false;
                //}

                var dbCurrentProjectSnapshot = dbProject.ProjectSnapshots.Where(r => r.ProjectSnapshotSequence == dbProject.CurrentProjectSnapshotSequence).Single();

                dbProject.CurrentProjectSnapshotSequence += 1;
                dbProject.UpdateDateTimeUtc = utcNow;

                CreateProjectSnapshot(ctx, dbProject, dbCurrentProjectSnapshot.DesignSnapshotId, projectSpecification, utcNow);

                _ = await ctx.SaveChangesAsync().ConfigureAwait(false);

                return(true);
            }
            catch (Exception ex)
            {
                ExceptionLogger.Log(ex);
                throw;
            }
        }
Пример #5
0
        private void CreateProjectSnapshot(QuiltContext ctx, Project dbProject, long designSnapshotId, MProject_ProjectSpecification data, DateTime utcNow)
        {
            var dbArtifact = new Artifact()
            {
                ArtifactTypeCode      = data.ProjectArtifactTypeCode,      // ArtifactTypes.Kit
                ArtifactValueTypeCode = data.ProjectArtifactValueTypeCode, // ArtifactValueTypes.Json
                Value = data.ProjectArtifactValue
            };

            _ = ctx.Artifacts.Add(dbArtifact);

            var dbProjectSnapshot = new ProjectSnapshot()
            {
                Project = dbProject,
                ProjectSnapshotSequence = dbProject.CurrentProjectSnapshotSequence,
                Name              = dbProject.Name,
                DesignSnapshotId  = designSnapshotId,
                Artifact          = dbArtifact,
                CreateDateTimeUtc = utcNow,
                UpdateDateTimeUtc = utcNow,
            };

            _ = ctx.ProjectSnapshots.Add(dbProjectSnapshot);

            foreach (var component in data.Components)
            {
                var mInventoryItem      = InventoryMicroService.GetEntry(component.Sku);
                var consumableReference = CreateConsumableReference.FromInventoryItemId(mInventoryItem.InventoryItemId);

                var dbProjectSnapshotComponent = dbProjectSnapshot.ProjectSnapshotComponents.Where(r =>
                                                                                                   r.ConsumableReference == consumableReference &&
                                                                                                   r.UnitOfMeasureCodeNavigation == ctx.UnitOfMeasure(component.UnitOfMeasureCode)).SingleOrDefault();

                if (dbProjectSnapshotComponent != null)
                {
                    dbProjectSnapshotComponent.Quantity += component.Quantity;
                }
                else
                {
                    dbProjectSnapshotComponent = new ProjectSnapshotComponent()
                    {
                        ProjectSnapshot = dbProjectSnapshot,
                        ProjectSnapshotComponentSequence = dbProjectSnapshot.ProjectSnapshotComponents.Count + 1,
                        ConsumableReference = consumableReference,
                        UnitOfMeasureCode   = component.UnitOfMeasureCode,
                        Quantity            = component.Quantity,
                    };
                    _ = ctx.ProjectSnapshotComponents.Add(dbProjectSnapshotComponent);
                }
            }
        }
Пример #6
0
        public async Task <Guid> CreateProjectAsync(long ownerId, string name, string projectTypeCode, long designSnapshotId, MProject_ProjectSpecification projectSpecification, DateTime utcNow)
        {
            //if (SecurityPolicy.IsBuiltInUser(m_userId))
            //{
            //    throw new InvalidOperationException("Built-in user ID not supported.");
            //}

            try
            {
                using var ctx = QuiltContextFactory.Create();

                var projectNumber = ctx.GetProjectNumber(utcNow);

                var dbProject = new Project()
                {
                    ProjectId = Guid.NewGuid(),
                    OwnerId   = ownerId,
                    Name      = name,
                    CurrentProjectSnapshotSequence = 0,
                    ProjectNumber     = projectNumber,
                    CreateDateTimeUtc = utcNow,
                    UpdateDateTimeUtc = utcNow,
                    ProjectTypeCode   = projectTypeCode,
                };
                _ = ctx.Projects.Add(dbProject);

                CreateProjectSnapshot(ctx, dbProject, designSnapshotId, projectSpecification, utcNow);

                _ = await ctx.SaveChangesAsync().ConfigureAwait(false);

                return(dbProject.ProjectId);
            }
            catch (Exception ex)
            {
                ExceptionLogger.Log(ex);
                throw;
            }
        }