private static void ShareValue(UpsilabEntities db, Guid idDocument, Fields field, string value, Guid idUserUpdated, bool defaultValue = false) 
        {
            var document = db.Document.FirstOrDefault(x => x.idDocument == idDocument);            
            
            var relatedDocuments = db.Document.Where(
                x => x.idSignatureTransaction == document.idSignatureTransaction
                && x.idDocument != document.idDocument
                && AllowedDocumentTypes.Contains(x.DocumentType)
            ).ToList();

            var idRelated = new List<Guid>();
            if (relatedDocuments != null) 
            {
                idRelated = (from item in relatedDocuments where item.IdDocumentModel != Guid.Empty select item.IdDocumentModel.GetValueOrDefault()).ToList();
            }

            var entityDocModel = db.DocumentModel.Where(x => idRelated.Contains(x.IdDocumentModel)).ToList();
            var modelDocs = (from item in entityDocModel select DocumentModelBL.EntityToModel(item)).ToList();

            foreach (var relatedDocs in relatedDocuments)
            {
                var itemValue = db.FieldValue.FirstOrDefault(x => x.IdDocument == relatedDocs.idDocument && x.IdField == field.IdField);
                //var html = (from item in modelDocs where item.IdDocument == relatedDocs.IdDocumentModel select item.HtmlTemplate).FirstOrDefault();
                //if (html != null && html.Contains(field.NameKey))
                //{
                //    if (itemValue == null)
                //    {
                //        var fieldValue = new FieldValue
                //            {
                //                IdField = field.IdField,
                //                Value = value,
                //                IdDocument = relatedDocs.idDocument,
                //                DateCreated = DateTime.Now
                //            };

                //        if (defaultValue == false)
                //        {
                //            fieldValue.DateUpdated = DateTime.Now;
                //            fieldValue.IdUserUpdated = idUserUpdated;
                //        }
                //        db.FieldValue.AddObject(fieldValue);
                //    }
                //    else if (defaultValue == false)
                //    {
                //        itemValue.Value = value;
                //        itemValue.DateUpdated = DateTime.Now;
                //        itemValue.IdUserUpdated = idUserUpdated;
                //        db.ObjectStateManager.ChangeObjectState(itemValue, EntityState.Modified);
                //    }
                //}

                if (itemValue == null)
                {
                    var fieldValue = new FieldValue
                    {
                        IdField = field.IdField,
                        Value = value,
                        IdDocument = relatedDocs.idDocument,
                        DateCreated = DateTime.Now
                    };

                    if (defaultValue == false)
                    {
                        fieldValue.DateUpdated = DateTime.Now;
                        fieldValue.IdUserUpdated = idUserUpdated;
                    }
                    db.FieldValue.AddObject(fieldValue);
                }
                else if (defaultValue == false)
                {
                    itemValue.Value = value;
                    itemValue.DateUpdated = DateTime.Now;
                    itemValue.IdUserUpdated = idUserUpdated;
                    db.ObjectStateManager.ChangeObjectState(itemValue, EntityState.Modified);
                }
            }
        }
        public static Fields FieldModelToEntity(SignFieldsModel model)
        {
            var entity = new Fields {                
                NameKey = model.Name,
                Label = model.Label,
                Type = model.Type,
                IsShared = model.IsShared,
                DateCreated = model.DateCreated,
                Order = model.Order,
                Required = model.Required
            };
            if (model.IdField != null) entity.IdField = model.IdField.GetValueOrDefault();
            if (model.IdDocumentModel != null) entity.IdDocumentModel = model.IdDocumentModel.GetValueOrDefault();
            if (model.IdDocumentSection != null) entity.IdDocumentSection = model.IdDocumentSection.GetValueOrDefault();

            return entity;
        }
        private static void AttachFieldValue(UpsilabEntities db, Guid idDocument, Fields _Field, string value, Guid? idUserUpdated, bool defaultValueOnly = false)
        {
            var fieldValue = db.FieldValue.FirstOrDefault(x => x.IdDocument == idDocument && x.IdField == _Field.IdField);

            if (fieldValue != null)
            {
                if(defaultValueOnly == false) //Do not update values from defaults
                {
                    fieldValue.Value = value;
                    fieldValue.DateUpdated = DateTime.Now;
                    fieldValue.IdUserUpdated = (idUserUpdated != Guid.Empty) ? idUserUpdated : null;
                    db.ObjectStateManager.ChangeObjectState(fieldValue, EntityState.Modified);
                }
            }
            else if (!String.IsNullOrEmpty(value) && !String.IsNullOrWhiteSpace(value))
            {
                var fv = new FieldValue
                {
                    IdField = _Field.IdField,
                    Value = value,
                    IdDocument = idDocument,
                    DateCreated = DateTime.Now
                };

                if (defaultValueOnly == false) //If not automatic update save (IdUser)
                {
                    fv.DateUpdated = DateTime.Now;
                    fv.IdUserUpdated = (idUserUpdated != Guid.Empty) ? idUserUpdated : null;
                }

                db.FieldValue.AddObject(fv);
            }
        }
 public static SignFieldsModel FieldEntityToModel(Fields entity, bool readOnly = false)
 {
     int idInt;
     int.TryParse(entity.IdField.ToString(), out idInt);
     var model = new SignFieldsModel {
         IdField = idInt,
         IdDocumentModel = entity.IdDocumentModel,
         IdDocumentSection = entity.IdDocumentSection,
         Name = entity.NameKey,
         Label = entity.Label,
         Type = entity.Type,
         IsShared = entity.IsShared,
         DateCreated = entity.DateCreated.GetValueOrDefault(),
         Required = entity.Required.GetValueOrDefault(),
         Order = entity.Order,
         IsReadOnly = readOnly
     };
     return model;
 }