public override void OnAfterDelete(IDeleteRequestHandler handler)
        {
            if (ServiceQueryHelper.UseSoftDelete(handler.Row))
            {
                return;
            }

            var field        = (StringField)Target;
            var oldFilesJSON = field[handler.Row].TrimToNull();
            var oldFileList  = ParseAndValidate(oldFilesJSON, "oldFiles");

            var filesToDelete = new FilesToDelete();

            UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete);

            foreach (var file in oldFileList)
            {
                DeleteOldFile(filesToDelete, file.Filename);
            }
        }
Esempio n. 2
0
        protected virtual void ExecuteDelete()
        {
            var isActiveDeletedRow = Row as IIsActiveDeletedRow;
            var isDeletedRow       = Row as IIsDeletedRow;
            var deleteLogRow       = Row as IDeleteLogRow;
            var idField            = Row.IdField;
            var id = idField.ConvertValue(Request.EntityId, CultureInfo.InvariantCulture);

            if (isActiveDeletedRow == null && isDeletedRow == null && deleteLogRow == null)
            {
                var delete = new SqlDelete(Row.Table)
                             .WhereEqual(idField, id);

                InvokeDeleteAction(() =>
                {
                    if (delete.Execute(Connection) != 1)
                    {
                        throw DataValidation.EntityNotFoundError(Row, id, Localizer);
                    }
                });
            }
            else
            {
                if (isDeletedRow != null || isActiveDeletedRow != null)
                {
                    var update = new SqlUpdate(Row.Table)
                                 .WhereEqual(idField, id)
                                 .Where(ServiceQueryHelper.GetNotDeletedCriteria(Row));

                    if (isActiveDeletedRow != null)
                    {
                        update.Set(isActiveDeletedRow.IsActiveField, -1);
                    }
                    else if (isDeletedRow != null)
                    {
                        update.Set(isDeletedRow.IsDeletedField, true);
                    }

                    if (deleteLogRow != null)
                    {
                        update.Set(deleteLogRow.DeleteDateField, DateTimeField.ToDateTimeKind(DateTime.Now,
                                                                                              deleteLogRow.DeleteDateField.DateTimeKind))
                        .Set(deleteLogRow.DeleteUserIdField, User?.GetIdentifier().TryParseID());
                    }
                    else if (Row is IUpdateLogRow updateLogRow)
                    {
                        update.Set(updateLogRow.UpdateDateField, DateTimeField.ToDateTimeKind(DateTime.Now,
                                                                                              updateLogRow.UpdateDateField.DateTimeKind))
                        .Set(updateLogRow.UpdateUserIdField, User?.GetIdentifier().TryParseID());
                    }

                    InvokeDeleteAction(() =>
                    {
                        if (update.Execute(Connection) != 1)
                        {
                            throw DataValidation.EntityNotFoundError(Row, id, Localizer);
                        }
                    });
                }
                else //if (deleteLogRow != null)
                {
                    var update = new SqlUpdate(Row.Table)
                                 .Set(deleteLogRow.DeleteDateField, DateTimeField.ToDateTimeKind(DateTime.Now,
                                                                                                 deleteLogRow.DeleteDateField.DateTimeKind))
                                 .Set(deleteLogRow.DeleteUserIdField, User?.GetIdentifier().TryParseID())
                                 .WhereEqual(idField, id)
                                 .Where(new Criteria(deleteLogRow.DeleteUserIdField).IsNull());

                    InvokeDeleteAction(() =>
                    {
                        if (update.Execute(Connection) != 1)
                        {
                            throw DataValidation.EntityNotFoundError(Row, id, Localizer);
                        }
                    });
                }
            }

            InvalidateCacheOnCommit();
        }
Esempio n. 3
0
        public override void OnBeforeSave(ISaveRequestHandler handler)
        {
            if (attrList == null)
            {
                return;
            }

            if (attrFields == null)
            {
                attrFields = attrList.Select(attr =>
                {
                    return(attr.Fields.Select(x =>
                    {
                        var field = handler.Row.FindFieldByPropertyName(x) ?? handler.Row.FindField(x);
                        if (ReferenceEquals(null, field))
                        {
                            throw new InvalidOperationException(string.Format(
                                                                    "Can't find field '{0}' of unique constraint in row type '{1}'",
                                                                    x, handler.Row.GetType().FullName));
                        }
                        return field;
                    }));
                }).ToArray();
            }

            for (var i = 0; i < attrList.Length; i++)
            {
                var attr   = attrList[i];
                var fields = attrFields[i];

                UniqueFieldSaveBehavior.ValidateUniqueConstraint(handler, fields, Localizer, attr.ErrorMessage,
                                                                 attrList[i].IgnoreDeleted ? ServiceQueryHelper.GetNotDeletedCriteria(handler.Row) : Criteria.Empty);
            }
        }
Esempio n. 4
0
 public override void OnBeforeSave(ISaveRequestHandler handler)
 {
     ValidateUniqueConstraint(handler, new Field[] { Target }, Localizer,
                              attr == null ? (string)null : attr.ErrorMessage,
                              attr != null && attr.IgnoreDeleted ? ServiceQueryHelper.GetNotDeletedCriteria(handler.Row) : Criteria.Empty);
 }